<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.16"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>LibTools: H:/project/LibTools/src/tools/ShareApi.cpp 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">LibTools
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.8.16 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',false,false,'search.php','搜索');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_1563a38af0d3a5e4a6330d6d45e9792a.html">tools</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">ShareApi.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_share_api_8cpp.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#if defined(WIN32)</span></div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#   ifndef WIN32_LEAN_AND_MEAN</span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#       define WIN32_LEAN_AND_MEAN </span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#   endif</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#   include &lt;shlwapi.h&gt;</span></div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#   include &lt;WinSock2.h&gt;</span></div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span></div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;ctype.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_share_api_8h.html">ShareApi.h</a>&quot;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;../algorithm/Algorithm.h&quot;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;../time/Time.h&quot;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;../stream/StringTools.h&quot;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef LINUX</span></div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#   include &lt;iconv.h&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#   include &lt;pthread.h&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#   include &lt;sys/eventfd.h&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#   include &lt;execinfo.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#   include &lt;signal.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#   include &lt;sys/wait.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#   include &lt;dlfcn.h&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#elif defined(WIN32)</span></div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#   pragma warning( disable : 4091 )</span></div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#   pragma comment(lib, &quot;DbgHelp.lib&quot;)</span></div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#   pragma comment(lib, &quot;Shlwapi.lib&quot;)</span></div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#   include &lt;process.h&gt;</span></div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#   include &lt;intrin.h&gt;</span></div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#   include &lt;DbgHelp.h&gt;</span></div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="____tools_8h.html">./internal/__tools.h</a>&quot;</span></div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">//#pragma warning(disable:4307)</span></div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">//#pragma warning(disable:4996)</span></div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#ac4b56387d2597207e125ebeb29d8179f">   43</a></span>&#160;<span class="preprocessor">#define CPU_TICK_TIME 16</span></div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<a class="code" href="tools_8h.html#a201ce692c9dca6599e5c12d00167419b">DEF_BEG_LIBTOOLS</a></div>
<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="keyword">using</span> std::min;</div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="namespace_share_api.html#af058258537f5205e21395182fcc04208">   49</a></span>&#160;<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> <a class="code" href="namespace_share_api.html#af058258537f5205e21395182fcc04208">ShareApi::GetLastError</a>()</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <a class="code" href="namespace_share_api.html#af058258537f5205e21395182fcc04208">return ::GetLastError</a>();</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keywordflow">return</span> errno;</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;}</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#afde789754e5c22e79da0052d34310c9b">   58</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="_share_api_8cpp.html#afde789754e5c22e79da0052d34310c9b">GetPosValue</a>(<span class="keywordtype">int</span> curValue)</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;{</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keywordflow">switch</span> (curValue)</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    {</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="tools_8h.html#ae2c4c68b8f9b63358f8c8f32b77ecb09">FILE_SEEK_SET</a>:</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;        <span class="keywordflow">return</span> FILE_BEGIN;</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="tools_8h.html#a7c3bbd9732668a3188d931034a5f230b">FILE_SEEK_CUR</a>:</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        <span class="keywordflow">return</span> FILE_CURRENT;</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="tools_8h.html#a3c580687c3aced8196380525e9532973">FILE_SEEK_END</a>:</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        <span class="keywordflow">return</span> FILE_END;</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    }</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordflow">switch</span> (curValue)</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    {</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="tools_8h.html#ae2c4c68b8f9b63358f8c8f32b77ecb09">FILE_SEEK_SET</a>:</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <span class="keywordflow">return</span> SEEK_SET;</div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="tools_8h.html#a7c3bbd9732668a3188d931034a5f230b">FILE_SEEK_CUR</a>:</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        <span class="keywordflow">return</span> SEEK_CUR;</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="tools_8h.html#a3c580687c3aced8196380525e9532973">FILE_SEEK_END</a>:</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        <span class="keywordflow">return</span> SEEK_END;</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    }</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;}</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a8d8eb33de0a336b6c099d4196e75fbc6">   84</a></span>&#160;<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> <a class="code" href="namespace_share_api.html#a8d8eb33de0a336b6c099d4196e75fbc6">ShareApi::OpenFile</a>(<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* szFileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mode)</div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;{</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwAccess = 0,dwShare = 0,dwCreate = 0,dwFlagsAndAttributes = 0;</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="comment">// 访问模式</span></div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keywordflow">if</span>(mode &amp; 1) dwAccess =  GENERIC_READ;  <span class="comment">// 只读</span></div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;1) &amp; 1) dwAccess |= GENERIC_WRITE;<span class="comment">// 只写</span></div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;2) &amp; 1) dwAccess = GENERIC_READ|GENERIC_WRITE;<span class="comment">// 读写</span></div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="comment">// 共享模式</span></div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;3) &amp; 1) dwShare = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; <span class="comment">// 其它进程也可以打开文件</span></div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    <span class="keywordflow">else</span> dwShare = 0; <span class="comment">// 其它进程不可以打开文件</span></div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="comment">// 是否清空文件</span></div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;5) &amp; 1) dwCreate = CREATE_ALWAYS;</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordflow">else</span> dwCreate = OPEN_EXISTING;  <span class="comment">// 打开已存在的文件</span></div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="comment">// 是否为隐藏文件</span></div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;6) &amp; 1) dwFlagsAndAttributes = FILE_ATTRIBUTE_HIDDEN;</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordflow">else</span> dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="comment">// 异步操作I/O</span></div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;7) &amp; 1) dwFlagsAndAttributes |= FILE_FLAG_OVERLAPPED;</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keywordflow">if</span> ((mode &gt;&gt; 8) &amp; 1)</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    {</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <span class="comment">// 文件不存在则创建文件，存在则打开</span></div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        dwCreate = OPEN_ALWAYS;</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        <span class="comment">// 是否创建新文件,如果存在文件则函数返回失败</span></div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        <span class="keywordflow">if</span> ((mode &gt;&gt; 9) &amp; 1) dwCreate = CREATE_NEW;</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    }</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    <a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile = (<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a>)::CreateFile(szFileName,dwAccess,dwShare,NULL,dwCreate,dwFlagsAndAttributes,NULL);</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keywordflow">if</span>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile == INVALID_HANDLE_VALUE)</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    {</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    }</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    mode_t permission = S_IRWXG|S_IRWXU|S_IRWXO;</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="keywordtype">int</span> dwAccess = 0;</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordflow">if</span>(mode &amp; 1){</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;         dwAccess = O_RDONLY;   <span class="comment">// 只读</span></div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;         permission = 0;</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    }</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;         </div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;1) &amp; 1) dwAccess |= O_WRONLY; <span class="comment">// 只写</span></div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;2) &amp; 1) dwAccess |= O_RDWR; <span class="comment">// 读写</span></div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="comment">// 共享模式,隐藏文件功能移除</span></div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;5) &amp; 1) dwAccess |= O_TRUNC; <span class="comment">// 清空内容</span></div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keywordflow">if</span>((mode &gt;&gt; 7) &amp; 1) dwAccess |= O_NONBLOCK; <span class="comment">// 异步I/O</span></div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <span class="keywordflow">if</span>((mode&gt;&gt;8) &amp; 1)</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    {</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        dwAccess |= O_CREAT; <span class="comment">// 不存在文件则创建</span></div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        <span class="keywordflow">if</span>((mode&gt;&gt;9) &amp; 1) dwAccess |= O_EXCL; <span class="comment">// 存在文件则失败</span></div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    }</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="keywordtype">int</span> file = open64(szFileName, dwAccess | O_CLOEXEC, permission);</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keywordflow">if</span> (file == -1)</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    {</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    }</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile = file;</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160; </div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="keywordflow">return</span> hFile;</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;}</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a5853aba96a6eaed3b9dd1a66805f6070">  146</a></span>&#160;<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> <a class="code" href="namespace_share_api.html#a5853aba96a6eaed3b9dd1a66805f6070">ShareApi::GetFileSizeEx</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile)</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;{</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html">LARGE_INTEGER</a> nFileSize;</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <span class="keywordflow">if</span> (!::<a class="code" href="namespace_share_api.html#a5853aba96a6eaed3b9dd1a66805f6070">GetFileSizeEx</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, &amp;nFileSize)) <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    <span class="keywordflow">return</span> nFileSize.<a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html#a34beb9c05c3a2982d57fc450cc934ae3">QuadPart</a>;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    <span class="keyword">struct </span>stat64 buf;</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keywordflow">if</span> (fstat64(hFile, &amp;buf) != 0) <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="keywordflow">return</span> buf.st_size;</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;}</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160; </div>
<div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a8723a4c07d1482980a46b2f650bd2e5e">  159</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="namespace_share_api.html#a8723a4c07d1482980a46b2f650bd2e5e">ShareApi::GetFileSize</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile)</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;{</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> nFileSize = <a class="code" href="namespace_share_api.html#a8723a4c07d1482980a46b2f650bd2e5e">::GetFileSize</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, NULL);</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keywordflow">if</span> (nFileSize == INVALID_FILE_SIZE){</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    }</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordflow">return</span> nFileSize;</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    <span class="keyword">struct </span>stat buf;</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keywordflow">if</span> (fstat(hFile, &amp;buf) != 0) <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordflow">return</span> buf.st_size;</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;}</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a52ea018b9be6f951d2bdce36cc0eae15">  174</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a52ea018b9be6f951d2bdce36cc0eae15">ShareApi::SetFilePointerEx</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile, <a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> dwOffset, <span class="keywordtype">int</span> iWhence)</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;{</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keywordtype">int</span> iw = <a class="code" href="_share_api_8cpp.html#afde789754e5c22e79da0052d34310c9b">GetPosValue</a>(iWhence);</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html">LARGE_INTEGER</a> nPointPos;</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    nPointPos.<a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html#a34beb9c05c3a2982d57fc450cc934ae3">QuadPart</a> = dwOffset;</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keywordflow">if</span> (!::<a class="code" href="namespace_share_api.html#a52ea018b9be6f951d2bdce36cc0eae15">SetFilePointerEx</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, nPointPos, NULL, iw)) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    <a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> nPos = (<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)lseek64(hFile, (off64_t)dwOffset, iw);</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <span class="keywordflow">if</span>(nPos == -1) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;}</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160; </div>
<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a35bc338ea514bb9d9f3de57730db5d60">  188</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a35bc338ea514bb9d9f3de57730db5d60">ShareApi::SetFilePointer</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile, <span class="keywordtype">int</span> dwOffset, <span class="keywordtype">int</span> iWhence)</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;{</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="keywordtype">int</span> iw = <a class="code" href="_share_api_8cpp.html#afde789754e5c22e79da0052d34310c9b">GetPosValue</a>(iWhence);</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    <span class="keywordflow">if</span> (::<a class="code" href="namespace_share_api.html#a35bc338ea514bb9d9f3de57730db5d60">SetFilePointer</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, dwOffset, NULL, iw) == INVALID_SET_FILE_POINTER){</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    }</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    <a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> nPos = (<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)lseek(hFile, dwOffset, iw);</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keywordflow">if</span>(nPos == -1) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;}</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160; </div>
<div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a12d3c7f822d56a7161601bfde8cd2791">  202</a></span>&#160;<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> <a class="code" href="namespace_share_api.html#a12d3c7f822d56a7161601bfde8cd2791">ShareApi::GetFilePointerEx</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile)</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;{</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html">LARGE_INTEGER</a> nPointPos = {0}, curPointPos;</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <span class="keywordflow">if</span> (!::<a class="code" href="namespace_share_api.html#a52ea018b9be6f951d2bdce36cc0eae15">SetFilePointerEx</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, nPointPos, &amp;curPointPos, FILE_CURRENT)) <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keywordflow">return</span> curPointPos.<a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html#a34beb9c05c3a2982d57fc450cc934ae3">QuadPart</a>;</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    <a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> nPos = (<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)lseek64(hFile, 0, SEEK_CUR);</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <span class="keywordflow">return</span> nPos;</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;}</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160; </div>
<div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="namespace_share_api.html#acd17304851a877042934e8967d7ac27e">  214</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="namespace_share_api.html#acd17304851a877042934e8967d7ac27e">ShareApi::GetFilePointer</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile)</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;{</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwPtr = <a class="code" href="namespace_share_api.html#a35bc338ea514bb9d9f3de57730db5d60">::SetFilePointer</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, 0, NULL, FILE_CURRENT);</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    <span class="keywordflow">if</span> (dwPtr == INVALID_SET_FILE_POINTER){</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    }</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keywordflow">return</span> dwPtr;</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="keywordflow">return</span> lseek(hFile, 0, SEEK_CUR);</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;}</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160; </div>
<div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a29fcdef9c215ce0009e28dd52ba2c853">  227</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a29fcdef9c215ce0009e28dd52ba2c853">ShareApi::CloseFile</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile)</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;{</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    CloseHandle((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile);</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    close(hFile);</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;}</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160; </div>
<div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a4b481d0807997fab0917801a3203aad7">  236</a></span>&#160;<a class="code" href="tools_8h.html#ae44d8d5d0e473c82cf8f2021a86cb6a4">fsize_t</a> <a class="code" href="namespace_share_api.html#a4b481d0807997fab0917801a3203aad7">ShareApi::ReadFile</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile, <span class="keywordtype">void</span> *buf, <a class="code" href="tools_8h.html#ae44d8d5d0e473c82cf8f2021a86cb6a4">fsize_t</a> size)</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;{</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> nRead = 0;</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    <span class="keywordflow">if</span> (!::<a class="code" href="namespace_share_api.html#a4b481d0807997fab0917801a3203aad7">ReadFile</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, buf, (<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a>)size, &amp;nRead, NULL))</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    {</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        nRead = -1;</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    }</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <a class="code" href="tools_8h.html#ae44d8d5d0e473c82cf8f2021a86cb6a4">fsize_t</a> nRead = 0;</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    nRead = read(hFile, buf, size);</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    <span class="keywordflow">return</span> nRead;</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;}</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160; </div>
<div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ad1a8ec9389fc2b1cbf9b7a2a10a054bd">  251</a></span>&#160;<a class="code" href="tools_8h.html#ae44d8d5d0e473c82cf8f2021a86cb6a4">fsize_t</a> <a class="code" href="namespace_share_api.html#ad1a8ec9389fc2b1cbf9b7a2a10a054bd">ShareApi::WriteFile</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile, <span class="keyword">const</span> <span class="keywordtype">void</span>* buf, <a class="code" href="tools_8h.html#ae44d8d5d0e473c82cf8f2021a86cb6a4">fsize_t</a> size)</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;{</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> nWrite = 0;</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    <span class="keywordflow">if</span> (!::<a class="code" href="namespace_share_api.html#ad1a8ec9389fc2b1cbf9b7a2a10a054bd">WriteFile</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, buf, (<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a>)size, &amp;nWrite, NULL))</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    {</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        nWrite = -1;</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    }</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <a class="code" href="tools_8h.html#ae44d8d5d0e473c82cf8f2021a86cb6a4">fsize_t</a> nWrite = 0;</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    nWrite = write(hFile, buf, size);</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <span class="keywordflow">return</span> nWrite;</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;}</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160; </div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;<span class="comment">// static inline BOOL In_IsDirent(const TCHAR* szDir, PWIN32_FIND_DATA pData)</span></div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;<span class="comment">// {</span></div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;<span class="comment">//  HANDLE hFile = ::FindFirstFile(szDir, pData);</span></div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;<span class="comment">//  if (hFile != INVALID_HANDLE_VALUE)</span></div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="comment">//  {</span></div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="comment">//      if (pData-&gt;dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)</span></div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;<span class="comment">//      {</span></div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="comment">//          ::FindClose(hFile);</span></div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;<span class="comment">//          return TRUE;</span></div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;<span class="comment">//      }</span></div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<span class="comment">//      ::FindClose(hFile);</span></div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;<span class="comment">//  }</span></div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;<span class="comment">//  return FALSE;</span></div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;<span class="comment">// }</span></div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160; </div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> FileTimeToTime_t(<span class="keyword">const</span> FILETIME&amp; ft, time_t&amp; t)</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;{</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    <a class="code" href="tools_8h.html#af559a7ae68520d96f21d0655d6792508">LONGLONG</a>  ltime_t;</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    ltime_t = ((<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)ft.dwHighDateTime &lt;&lt; 32) + ft.dwLowDateTime;</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    t = ((<a class="code" href="tools_8h.html#af559a7ae68520d96f21d0655d6792508">LONGLONG</a>)(ltime_t - 116444736000000000) / 10000000);</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;}</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160; </div>
<div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a714ae756abbd2497307c649f6e9259c2">  290</a></span>&#160;<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> <a class="code" href="namespace_share_api.html#a714ae756abbd2497307c649f6e9259c2">ShareApi::FindFirstFile</a>(<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> *szDir, <a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html">PFILEFINDINFO</a> pInfo)</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;{</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFind = (<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a>)NULL;</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    WIN32_FIND_DATA info;</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> szFindPath[<a class="code" href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a>] = { 0 };</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="keywordtype">size_t</span> dirLen = <a class="code" href="tools_8h.html#ad253c68ce58b12b277fedc2d785d7977">_tcslen</a>(szDir);</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(szFindPath, <span class="keyword">sizeof</span>(szFindPath), szDir);</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    <span class="keywordflow">if</span> (szFindPath[dirLen - 1] == <span class="charliteral">&#39;/&#39;</span> || szFindPath[dirLen - 1] == <span class="charliteral">&#39;\\&#39;</span>) szFindPath[--dirLen] = 0;</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    std::replace(szFindPath, szFindPath + dirLen, <span class="charliteral">&#39;/&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>);</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    <span class="comment">// 检查路径是否为目录</span></div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="namespace_share_api.html#a33259cc2e33070f75643c9836fa6befa">IsDirent</a>(szFindPath)) {</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>*)NULL);</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    }</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    <span class="comment">// windows 需要加*.*遍历</span></div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(szFindPath + <a class="code" href="tools_8h.html#ad253c68ce58b12b277fedc2d785d7977">_tcslen</a>(szFindPath), <span class="keyword">sizeof</span>(szFindPath) - <a class="code" href="tools_8h.html#ad253c68ce58b12b277fedc2d785d7977">_tcslen</a>(szFindPath), <a class="code" href="tools_8h.html#a5fc7b9645f751ccc053f6f59ab0d8924">TEXT</a>(<span class="stringliteral">&quot;\\*.*&quot;</span>));</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    hFind = (<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a>)::<a class="code" href="namespace_share_api.html#a714ae756abbd2497307c649f6e9259c2">FindFirstFile</a>(szFindPath, &amp;info);</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="keywordflow">if</span> ((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFind == INVALID_HANDLE_VALUE) {</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>*)NULL);</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    }</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">szFileName</a>, <span class="keyword">sizeof</span>(pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">szFileName</a>), info.cFileName);</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="keywordflow">if</span> (info.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) {</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;        pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#a3862008c58f4f60e0ec669c245af26d1">FILE_DIR</a>;</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    }</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (info.dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE){</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#af330a390be3908796a20f19c2f29bac4">FILE_NORMAL</a>;</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    }</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;        pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#a591d71072e6cd28616bc61e3b7b337c5">FILE_SYSTYPE</a>;</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    }</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    FileTimeToTime_t(info.ftCreationTime, pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#ad9c9e6207a688f672d689fa75f83da1a">tCreateTime</a>);</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    FileTimeToTime_t(info.ftLastWriteTime, pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#aeac0f7a7b532ebfa75dc0becaf579692">tUpdateTime</a>);</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a12703399394ee01b4753a90543f1e3c6">dwFilesize</a> = ((<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)info.nFileSizeHigh * ((<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)MAXDWORD + 1)) + (<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)info.nFileSizeLow;</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;#elif defined(<a class="code" href="tools_8h.html#a157a956e14c5c44b3f73ef23a4776f64">LINUX</a>)</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <a class="code" href="struct_____dir_info.html">DirInfo</a> *pDir = (<a class="code" href="struct_____dir_info.html">DirInfo</a>*)malloc(<span class="keyword">sizeof</span>(<a class="code" href="struct_____dir_info.html">DirInfo</a>));</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="keywordflow">if</span> (!pDir) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    memset(pDir, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct_____dir_info.html">DirInfo</a>));</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160; </div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    pDir-&gt;<a class="code" href="struct_____dir_info.html#a1edd4b3d5747cf3b79633bbf83bf7929">pDir</a> = opendir(szDir);</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    <span class="keywordflow">if</span> (pDir-&gt;<a class="code" href="struct_____dir_info.html#a1edd4b3d5747cf3b79633bbf83bf7929">pDir</a> != NULL)</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    {</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;        <span class="keyword">struct </span>dirent *dirInfo;</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;        dirInfo = readdir(pDir-&gt;<a class="code" href="struct_____dir_info.html#a1edd4b3d5747cf3b79633bbf83bf7929">pDir</a>);</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;        <span class="keywordflow">if</span> (dirInfo != <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>)</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;        {</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;            <span class="comment">// 获取文件状态信息</span></div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;            <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> szFilePath[<a class="code" href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a>];</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;            <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(szFilePath, <span class="keyword">sizeof</span>(szFilePath), szDir);</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;            <a class="code" href="namespace_share_api.html#ae93328641ac50ed7196d704ff24b3dc2">PathAppend</a>(szFilePath, dirInfo-&gt;d_name);</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;            <span class="keyword">struct </span>stat64 info;</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;            memset(&amp;info, 0, <span class="keyword">sizeof</span>(info));</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;            stat64(szFilePath, &amp;info);</div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a12703399394ee01b4753a90543f1e3c6">dwFilesize</a> = info.st_size;</div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#ad9c9e6207a688f672d689fa75f83da1a">tCreateTime</a> = info.st_ctime;</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#aeac0f7a7b532ebfa75dc0becaf579692">tUpdateTime</a> = info.st_mtime;</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;            <span class="keywordflow">if</span> (S_ISDIR(info.st_mode))</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;            {</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;                pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#a3862008c58f4f60e0ec669c245af26d1">FILE_DIR</a>;</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;                pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a12703399394ee01b4753a90543f1e3c6">dwFilesize</a> = 0;</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;            }</div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (S_ISREG(info.st_mode)) {</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;                pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#af330a390be3908796a20f19c2f29bac4">FILE_NORMAL</a>;</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;            }</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;            <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;                pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#a591d71072e6cd28616bc61e3b7b337c5">FILE_SYSTYPE</a>;</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;            }</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160; </div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;            <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">szFileName</a>, <span class="keyword">sizeof</span>(pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">szFileName</a>), dirInfo-&gt;d_name);</div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;            <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(pDir-&gt;<a class="code" href="struct_____dir_info.html#a7aa17ca5adb455c000e735f6b95c0664">szDir</a>, <span class="keyword">sizeof</span>(pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">szFileName</a>), szDir);</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;            hFind = (<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a>)pDir;</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        }</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;        <span class="keywordflow">else</span> </div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;        {</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;            <span class="keywordtype">int</span> ret = errno;</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;            closedir(pDir-&gt;<a class="code" href="struct_____dir_info.html#a1edd4b3d5747cf3b79633bbf83bf7929">pDir</a>);</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;            free(pDir);</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;            errno = ret;</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;        }</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    }</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160; </div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <span class="keywordflow">return</span> hFind;</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;}</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160; </div>
<div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ac4bb4bd0533fccd041039f9c51f1242d">  374</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#ac4bb4bd0533fccd041039f9c51f1242d">ShareApi::FindNextFile</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile, <a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html">PFILEFINDINFO</a> pInfo)</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;{</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    <a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> bRet = <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160; </div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    WIN32_FIND_DATA info;</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    bRet = <a class="code" href="namespace_share_api.html#ac4bb4bd0533fccd041039f9c51f1242d">::FindNextFile</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, &amp;info);</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    <span class="keywordflow">if</span> (bRet)</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    {</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;        <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">szFileName</a>, <span class="keyword">sizeof</span>(pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">szFileName</a>), info.cFileName);</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;        <span class="keywordflow">if</span> (info.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY){</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#a3862008c58f4f60e0ec669c245af26d1">FILE_DIR</a>;</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;        }</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(info.dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE){</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#af330a390be3908796a20f19c2f29bac4">FILE_NORMAL</a>;</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;        }</div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#a591d71072e6cd28616bc61e3b7b337c5">FILE_SYSTYPE</a>;</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;        }</div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;        FileTimeToTime_t(info.ftCreationTime, pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#ad9c9e6207a688f672d689fa75f83da1a">tCreateTime</a>);</div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;        FileTimeToTime_t(info.ftLastWriteTime, pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#aeac0f7a7b532ebfa75dc0becaf579692">tUpdateTime</a>);</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;        pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a12703399394ee01b4753a90543f1e3c6">dwFilesize</a> = ((<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)info.nFileSizeHigh * ((<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)MAXDWORD + 1))+ (<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>)info.nFileSizeLow;</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    }</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    <span class="keyword">struct </span>dirent *dir = readdir(((<a class="code" href="struct_____dir_info.html">DirInfo</a>*)hFile)-&gt;pDir);</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    <span class="keywordflow">if</span> (dir != <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>)</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    {</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;        <span class="comment">// 文件状态信息</span></div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;        <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> szFilePath[<a class="code" href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a>];</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(szFilePath, <span class="keyword">sizeof</span>(szFilePath), ((<a class="code" href="struct_____dir_info.html">DirInfo</a>*)hFile)-&gt;szDir);</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        <a class="code" href="namespace_share_api.html#ae93328641ac50ed7196d704ff24b3dc2">PathAppend</a>(szFilePath, dir-&gt;d_name);</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        <span class="keyword">struct </span>stat64 info;</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        stat64(szFilePath, &amp;info);</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a12703399394ee01b4753a90543f1e3c6">dwFilesize</a> = info.st_size;</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;        pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#ad9c9e6207a688f672d689fa75f83da1a">tCreateTime</a> = info.st_ctime;</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;        pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#aeac0f7a7b532ebfa75dc0becaf579692">tUpdateTime</a> = info.st_mtime;</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;        <span class="keywordflow">if</span> (S_ISDIR(info.st_mode))</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;        {</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#a3862008c58f4f60e0ec669c245af26d1">FILE_DIR</a>;</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a12703399394ee01b4753a90543f1e3c6">dwFilesize</a> = 0;</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;        }</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (S_ISREG(info.st_mode)) {</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#af330a390be3908796a20f19c2f29bac4">FILE_NORMAL</a>;</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;        }</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;            pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">fwFileAttributes</a> = <a class="code" href="tools_8h.html#a591d71072e6cd28616bc61e3b7b337c5">FILE_SYSTYPE</a>;</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        }</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;        <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">szFileName</a>, <span class="keyword">sizeof</span>(pInfo-&gt;<a class="code" href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">szFileName</a>), dir-&gt;d_name);</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    }</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;        bRet = <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;    }</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160; </div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    <span class="keywordflow">return</span> bRet;</div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;}</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160; </div>
<div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a753dde889b11d29612c759d13ee359b3">  431</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a753dde889b11d29612c759d13ee359b3">ShareApi::FindClose</a>(<a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile)</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;{</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    <span class="keywordflow">if</span> (hFile)</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    {</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;        <a class="code" href="namespace_share_api.html#a753dde889b11d29612c759d13ee359b3">::FindClose</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile);</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;        closedir(((<a class="code" href="struct_____dir_info.html">DirInfo</a>*)hFile)-&gt;pDir);</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;        <span class="keywordtype">int</span> err = errno;</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;        free(((<a class="code" href="struct_____dir_info.html">DirInfo</a>*)hFile));</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;        errno = err;</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    }</div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;}</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160; </div>
<div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ae93328641ac50ed7196d704ff24b3dc2">  446</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#ae93328641ac50ed7196d704ff24b3dc2">ShareApi::PathAppend</a>(<a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> *szSrcDir, <span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> *szSubDir)</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;{</div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    <span class="keywordtype">size_t</span> srclen = <a class="code" href="tools_8h.html#ad253c68ce58b12b277fedc2d785d7977">_tcslen</a>(szSrcDir);</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    <span class="keywordtype">size_t</span> sublen = <a class="code" href="tools_8h.html#ad253c68ce58b12b277fedc2d785d7977">_tcslen</a>(szSubDir);</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    <span class="keywordflow">if</span> (srclen + sublen + 1 &lt; <a class="code" href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a>)</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    {</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;        <span class="keywordflow">if</span> (szSrcDir[srclen - 1] != <span class="charliteral">&#39;/&#39;</span> &amp;&amp; szSrcDir[srclen-1] != <span class="charliteral">&#39;\\&#39;</span>)</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        {</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;            szSrcDir[srclen++] = <span class="charliteral">&#39;/&#39;</span>;</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;        }</div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(szSrcDir + srclen, <a class="code" href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a> - srclen, szSubDir);</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    }</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;}</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160; </div>
<div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a33259cc2e33070f75643c9836fa6befa">  460</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a33259cc2e33070f75643c9836fa6befa">ShareApi::IsDirent</a>(<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* szDir)</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;{</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    <span class="keywordflow">return</span> (PathIsDirectory(szDir) == FILE_ATTRIBUTE_DIRECTORY);</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="keyword">struct </span>stat info;</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    <span class="keywordflow">if</span>(stat(szDir, &amp;info) != -1){</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;        <span class="keywordflow">if</span>(S_ISDIR(info.st_mode)) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    }</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160; </div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;}</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160; </div>
<div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="namespace_share_api.html#af5477174100c9b0c5fa9b8a1787c09af">  474</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#af5477174100c9b0c5fa9b8a1787c09af">ShareApi::FilePathExists</a>(<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* szFileName)</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;{</div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="preprocessor">#ifdef LINUX</span></div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    <span class="keywordflow">if</span>(<a class="code" href="tools_8h.html#a3f16d54b8d2b6c3de321e830f99864fa">_taccess</a>(szFileName,F_OK) == 0) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;<span class="preprocessor">#elif defined(WIN32)</span></div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    <span class="keywordflow">if</span>(<a class="code" href="tools_8h.html#a3f16d54b8d2b6c3de321e830f99864fa">_taccess</a>(szFileName, 0) != -1) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160; </div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;}</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160; </div>
<div class="line"><a name="l00485"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a4e74675c3ae4e3233eeeb2088057aca8">  485</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a4e74675c3ae4e3233eeeb2088057aca8">ShareApi::GetCurrentDirectory</a>(<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> size, <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> *szPath)</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;{</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    <span class="keywordflow">if</span> (::<a class="code" href="namespace_share_api.html#a4e74675c3ae4e3233eeeb2088057aca8">GetCurrentDirectory</a>(size, szPath))</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    <span class="keywordflow">if</span> (::getcwd(szPath, size))</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;}</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160; </div>
<div class="line"><a name="l00497"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a2a12b9ef4412b9abb4848f65ffa2850e">  497</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a2a12b9ef4412b9abb4848f65ffa2850e">ShareApi::CreateDirectory</a>(<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* szPathName)</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;{</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    <a class="code" href="namespace_share_api.html#a2a12b9ef4412b9abb4848f65ffa2850e">return ::CreateDirectory</a>(szPathName, NULL);</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    <span class="keywordflow">if</span> (!::mkdir(szPathName, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH))</div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;}</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160; </div>
<div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a58553d013a36ffb0eb150b0eec157c63">  508</a></span>&#160;<a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* <a class="code" href="namespace_share_api.html#a58553d013a36ffb0eb150b0eec157c63">ShareApi::Global_GetLastError</a>(<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a>* pError <span class="comment">/* = NULL */</span>)</div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;{</div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* sInfo = NULL; </div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160; </div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> iErr = 0;</div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    <span class="keywordflow">if</span> (!pError){</div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;        iErr = <a class="code" href="namespace_share_api.html#af058258537f5205e21395182fcc04208">ShareApi::GetLastError</a>();</div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    }<span class="keywordflow">else</span>{</div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;        iErr = *pError;</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    }</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160; </div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    <span class="keywordtype">void</span> *hocal = NULL;</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> hOk = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;        FORMAT_MESSAGE_IGNORE_INSERTS,NULL,iErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)</div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;        ,(LPTSTR)&amp;hocal,<a class="code" href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a>*3,NULL);</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="keywordflow">if</span> (hOk)</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    {</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;        <span class="keywordflow">if</span> (hocal == NULL) { sInfo = NULL; <span class="keywordflow">return</span> sInfo; }</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;        <span class="keywordtype">size_t</span> iSize = <a class="code" href="tools_8h.html#ad253c68ce58b12b277fedc2d785d7977">_tcslen</a>((<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>*)hocal);</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;        sInfo = <span class="keyword">new</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>[iSize + 1];</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;        <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(sInfo, iSize + 1, (<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>*)hocal);</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;        LocalFree(hocal);</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    }</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> *sErr = strerror(iErr);</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    <span class="keywordtype">int</span> iSize = <a class="code" href="tools_8h.html#ad253c68ce58b12b277fedc2d785d7977">_tcslen</a>(sErr);</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    sInfo = <span class="keyword">new</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>[iSize + 1];</div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    <a class="code" href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a>(sInfo, iSize + 1, (<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>*)sErr);</div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160; </div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    <span class="keywordflow">return</span> sInfo;</div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;}</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160; </div>
<div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a79243d634ddf21dd7486ceb02e80e360">  542</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a79243d634ddf21dd7486ceb02e80e360">ShareApi::Global_FreeMem</a>(<a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* sInfo)</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;{</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    <span class="keywordflow">if</span> (sInfo)</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    {</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;        <span class="keyword">delete</span>[]sInfo;</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;        sInfo = NULL;</div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;    }</div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;}</div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160; </div>
<div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aa728fde57f4dbb2293a3c924cf0a379d">  551</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#aa728fde57f4dbb2293a3c924cf0a379d">ShareApi::AS_CPY_UTF8</a>(<span class="keywordtype">size_t</span> size, <span class="keywordtype">char</span> *des, <span class="keyword">const</span> <span class="keywordtype">char</span> *src)</div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;{</div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="namespace_share_api.html#a9d058caff66f8dd3726492a2ef6fc15f">GbkToUtf8</a>(des, size, src) == (<span class="keywordtype">size_t</span>)-1) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160; </div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;}</div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160; </div>
<div class="line"><a name="l00558"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a9d058caff66f8dd3726492a2ef6fc15f">  558</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#a9d058caff66f8dd3726492a2ef6fc15f">ShareApi::GbkToUtf8</a>(<span class="keywordtype">char</span>* des, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <span class="keywordtype">char</span>* src, <span class="keywordtype">size_t</span> srcLen <span class="comment">/* = 0 */</span>)</div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;{</div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    <span class="keywordtype">size_t</span> retSize = -1;</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    <span class="keywordflow">if</span> (size &lt; 1) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    <span class="keywordflow">if</span> (srcLen == 0) srcLen = strlen(src);</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a> *wsDes = <span class="keyword">new</span> <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>[srcLen + 1];</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    retSize = (size_t)MultiByteToWideChar(CP_ACP, 0, src, (<span class="keywordtype">int</span>)srcLen, wsDes, (<a class="code" href="_find_file_8h.html#a37cc1038758216808d5f75090b093c9a">int</a>)srcLen + 1);</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    <span class="keywordflow">if</span> (retSize != -1)</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    {</div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;        retSize = (size_t)WideCharToMultiByte(CP_UTF8, 0, wsDes, (<span class="keywordtype">int</span>)retSize, des, (<a class="code" href="_find_file_8h.html#a37cc1038758216808d5f75090b093c9a">int</a>)size, NULL, NULL);</div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;        des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    }</div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <span class="keyword">delete</span>[]wsDes;</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    wsDes = NULL;</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    iconv_t handle = iconv_open(<span class="stringliteral">&quot;UTF-8&quot;</span>, <span class="stringliteral">&quot;GBK&quot;</span>);</div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    <span class="keywordflow">if</span> (-1 != (<span class="keywordtype">long</span>)handle)</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    {</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;        <span class="keywordtype">char</span> ** instr = (<span class="keywordtype">char</span>**)&amp;src;</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;        <span class="keywordtype">char</span> * outstr = des;</div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;        <span class="keywordtype">size_t</span> outSize = size;</div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;        retSize = (size_t)iconv(handle, instr, &amp;srcLen, &amp;outstr, &amp;outSize);</div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;        <span class="keywordflow">if</span> (retSize != (<span class="keywordtype">size_t</span>)-1)</div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;        {</div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;            retSize = size - outSize;</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;            des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = 0;</div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;        }</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;        iconv_close(handle);</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    }</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="keywordflow">return</span> retSize;</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;}</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160; </div>
<div class="line"><a name="l00592"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a4d8aa14a00b0d34d476dece859c6203b">  592</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a4d8aa14a00b0d34d476dece859c6203b">ShareApi::UTF8_CPY_AS</a>(<span class="keywordtype">size_t</span> size, <span class="keywordtype">char</span> *des, <span class="keyword">const</span> <span class="keywordtype">char</span>* src)</div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;{</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="namespace_share_api.html#adda5f5c83e04637a92905f9f4164f075">Utf8ToGbk</a>(des, size, src) == (<span class="keywordtype">size_t</span>)-1) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160; </div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;}</div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160; </div>
<div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="namespace_share_api.html#adda5f5c83e04637a92905f9f4164f075">  599</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#adda5f5c83e04637a92905f9f4164f075">ShareApi::Utf8ToGbk</a>(<span class="keywordtype">char</span>* des, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <span class="keywordtype">char</span>* src, <span class="keywordtype">size_t</span> srcLen <span class="comment">/* = 0 */</span>)</div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;{</div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    <span class="keywordtype">size_t</span> retSize = -1;</div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <span class="keywordflow">if</span> (size &lt; 1) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="keywordflow">if</span> (srcLen == 0) srcLen = strlen(src);</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;    <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a> *wsDst = <span class="keyword">new</span> <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>[srcLen + 1];</div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    retSize = (size_t)MultiByteToWideChar(CP_UTF8, 0, src, (<span class="keywordtype">int</span>)srcLen, wsDst, (<a class="code" href="_find_file_8h.html#a37cc1038758216808d5f75090b093c9a">int</a>)srcLen);</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    <span class="keywordflow">if</span> (retSize != -1)</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    {</div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;        retSize = (size_t)WideCharToMultiByte(CP_ACP, 0, wsDst, (<span class="keywordtype">int</span>)retSize, des, (<a class="code" href="_find_file_8h.html#a37cc1038758216808d5f75090b093c9a">int</a>)size, NULL, NULL);</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;        des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    }</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    <span class="keyword">delete</span>[]wsDst;</div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    wsDst = NULL;</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    iconv_t handle = iconv_open(<span class="stringliteral">&quot;GBK&quot;</span>, <span class="stringliteral">&quot;UTF-8&quot;</span>);</div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    <span class="keywordflow">if</span> (-1 != (<span class="keywordtype">long</span>)handle)</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    {</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;        <span class="keywordtype">char</span> ** instr = (<span class="keywordtype">char</span>**)&amp;src;</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        <span class="keywordtype">char</span> * outstr = des;</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;        <span class="keywordtype">size_t</span> outSize = size;</div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;        retSize = (size_t)iconv(handle, instr, &amp;srcLen, &amp;outstr, &amp;outSize);</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;        <span class="keywordflow">if</span> (retSize != (<span class="keywordtype">size_t</span>)-1)</div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;        {</div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;            retSize = size - outSize;</div>
<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;            des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = 0;</div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;        }</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;        iconv_close(handle);</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    }</div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;    <span class="keywordflow">return</span> retSize;</div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;}</div>
<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160; </div>
<div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a62f4cba03d9da2cb150f2a6ccda04061">  633</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a62f4cba03d9da2cb150f2a6ccda04061">ShareApi::AS_CPY_WS</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a> *des, <span class="keyword">const</span> <span class="keywordtype">char</span>* src)</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;{</div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="namespace_share_api.html#aafc83846014294f90fd16a5649dfd550">GbkToUnicode</a>(des, size, src) == (<span class="keywordtype">size_t</span>)-1) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160; </div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;}</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160; </div>
<div class="line"><a name="l00640"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aafc83846014294f90fd16a5649dfd550">  640</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#aafc83846014294f90fd16a5649dfd550">ShareApi::GbkToUnicode</a>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>* des, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <span class="keywordtype">char</span>* src, <span class="keywordtype">size_t</span> srcLen)</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;{</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    <span class="keywordtype">size_t</span> retSize = -1;</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    <span class="keywordflow">if</span> (size &lt; 1) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    <span class="keywordflow">if</span> (srcLen == 0) srcLen = strlen(src);</div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    retSize = (size_t)::MultiByteToWideChar(CP_ACP, 0, src, (<span class="keywordtype">int</span>)srcLen, des, (<a class="code" href="_find_file_8h.html#a37cc1038758216808d5f75090b093c9a">int</a>)size);</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    iconv_t handle = iconv_open(<span class="stringliteral">&quot;UCS-2LE&quot;</span>, <span class="stringliteral">&quot;GBK&quot;</span>);</div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <span class="keywordflow">if</span> (-1 != (<span class="keywordtype">long</span>)handle)</div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    {</div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        size *= <span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>);</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;        <span class="keywordtype">char</span> ** instr = (<span class="keywordtype">char</span>**)&amp;src;</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        <span class="keywordflow">if</span>(<span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>) == 2)</div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        {</div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;            <span class="keywordtype">char</span> * outstr = (<span class="keywordtype">char</span>*)des;</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;            <span class="keywordtype">size_t</span> outSize = size;</div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;            retSize = (size_t)iconv(handle, instr, &amp;srcLen, &amp;outstr, &amp;outSize);</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;            <span class="keywordflow">if</span> (retSize != (<span class="keywordtype">size_t</span>)-1)</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;            {</div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;                retSize = size - outSize;</div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;                retSize /= <span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>);</div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;            }</div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;        }</div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;        {</div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;            <span class="keywordtype">char</span> *temp = <span class="keyword">new</span> <span class="keywordtype">char</span>[size];</div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;            <span class="keywordtype">size_t</span> outSize = size;</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;            <span class="keywordtype">char</span> *outptr = temp;</div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;            retSize = (size_t)iconv(handle, instr, &amp;srcLen, &amp;outptr, &amp;outSize);</div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;            <span class="keywordflow">if</span> (retSize != (<span class="keywordtype">size_t</span>)-1)</div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;            {</div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;                retSize = size - outSize;</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;                <span class="keywordtype">size_t</span> end = <a class="code" href="_algorithm_8h.html#a06f9a9fa653c88f36445cacf0ea7ad8d">copy_seq</a>(des, size / <span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>) - 1, (<span class="keywordtype">short</span>*)temp, retSize / 2);</div>
<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;                des[end] = 0;</div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;                retSize = end;</div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;            }</div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;            <span class="keyword">delete</span>[]temp;</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;        }</div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;        iconv_close(handle);</div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    }</div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    <span class="keywordflow">return</span> retSize;</div>
<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;}</div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160; </div>
<div class="line"><a name="l00686"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aaf65e2886782dff810bc58f68d3ceab4">  686</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#aaf65e2886782dff810bc58f68d3ceab4">ShareApi::UTF8_CPY_WS</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a> *des, <span class="keyword">const</span> <span class="keywordtype">char</span> *src)</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;{</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="namespace_share_api.html#a1ed844c1fb6e16ef713828402c8200a2">Utf8ToUnicode</a>(des, size, src) == (<span class="keywordtype">size_t</span>)-1) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160; </div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;}</div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160; </div>
<div class="line"><a name="l00693"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a1ed844c1fb6e16ef713828402c8200a2">  693</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#a1ed844c1fb6e16ef713828402c8200a2">ShareApi::Utf8ToUnicode</a>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>* des, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <span class="keywordtype">char</span>* src, <span class="keywordtype">size_t</span> srcLen <span class="comment">/* = 0 */</span>)</div>
<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;{</div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;    <span class="keywordtype">size_t</span> retSize = -1;</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    <span class="keywordflow">if</span> (size &lt; 1) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    <span class="keywordflow">if</span> (srcLen == 0) srcLen = strlen(src);</div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    retSize = (size_t)::MultiByteToWideChar(CP_UTF8, 0, src, (<span class="keywordtype">int</span>)srcLen, des, (<a class="code" href="_find_file_8h.html#a37cc1038758216808d5f75090b093c9a">int</a>)size);</div>
<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;    des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;    iconv_t handle = iconv_open(<span class="stringliteral">&quot;UCS-2LE&quot;</span>, <span class="stringliteral">&quot;UTF-8&quot;</span>);</div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    <span class="keywordflow">if</span> (-1 != (<span class="keywordtype">long</span>)handle)</div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    {</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;        <span class="keywordtype">char</span> ** instr = (<span class="keywordtype">char</span>**)&amp;src;</div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;        size *= <span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>);</div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;        <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>) == 2)</div>
<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;        {</div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;            <span class="keywordtype">char</span> * outstr = (<span class="keywordtype">char</span>*)des;</div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;            <span class="keywordtype">size_t</span> outSize = size;</div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;            retSize = (size_t)iconv(handle, instr, &amp;srcLen, &amp;outstr, &amp;outSize);</div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;            <span class="keywordflow">if</span> (retSize != (<span class="keywordtype">size_t</span>)-1)</div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;            {</div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;                retSize = size - outSize;</div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;                retSize /= <span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>);</div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;            }</div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;        }</div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;        {</div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;            <span class="keywordtype">char</span> *temp = <span class="keyword">new</span> <span class="keywordtype">char</span>[size];</div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;            <span class="keywordtype">size_t</span> outSize = size;</div>
<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;            <span class="keywordtype">char</span> *outptr = temp;</div>
<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;            retSize = (size_t)iconv(handle, instr, &amp;srcLen, &amp;outptr, &amp;outSize);</div>
<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;            <span class="keywordflow">if</span> (retSize != (<span class="keywordtype">size_t</span>)-1)</div>
<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;            {</div>
<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;                retSize = size - outSize;</div>
<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;                <span class="keywordtype">size_t</span> end = <a class="code" href="_algorithm_8h.html#a06f9a9fa653c88f36445cacf0ea7ad8d">copy_seq</a>(des, size / <span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>) - 1, (<span class="keywordtype">short</span>*)temp, retSize / 2);</div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;                des[end] = 0;</div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;                retSize = end;</div>
<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;            }</div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;            <span class="keyword">delete</span>[]temp;</div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;        }</div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;        iconv_close(handle);</div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    }</div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <span class="keywordflow">return</span> retSize;</div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;}</div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160; </div>
<div class="line"><a name="l00739"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a35355024be699fab00fff43941b41914">  739</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a35355024be699fab00fff43941b41914">ShareApi::WS_CPY_AS</a>(<span class="keywordtype">size_t</span> size, <span class="keywordtype">char</span> *des, <span class="keyword">const</span> <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a> *src)</div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;{</div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="namespace_share_api.html#a1feb20a6d3425c35c0022f486d106759">UnicodeToGbk</a>(des, size, src) == (<span class="keywordtype">size_t</span>)-1) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160; </div>
<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;}</div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160; </div>
<div class="line"><a name="l00746"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a1feb20a6d3425c35c0022f486d106759">  746</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#a1feb20a6d3425c35c0022f486d106759">ShareApi::UnicodeToGbk</a>(<span class="keywordtype">char</span>* des, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>* src, <span class="keywordtype">size_t</span> srcLen <span class="comment">/* = 0 */</span>)</div>
<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;{</div>
<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    <span class="keywordtype">size_t</span> retSize = -1;</div>
<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;    <span class="keywordflow">if</span> (size &lt; 1) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;    <span class="keywordflow">if</span> (srcLen == 0) srcLen = wcslen(src);</div>
<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    retSize = (size_t)::WideCharToMultiByte(CP_ACP, 0, src, (<span class="keywordtype">int</span>)srcLen, des, (<a class="code" href="_find_file_8h.html#a37cc1038758216808d5f75090b093c9a">int</a>)size, NULL, NULL);</div>
<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    iconv_t handle = iconv_open(<span class="stringliteral">&quot;GBK&quot;</span>, <span class="stringliteral">&quot;UCS-2LE&quot;</span>);</div>
<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    <span class="keywordflow">if</span> (-1 != (<span class="keywordtype">long</span>)handle)</div>
<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    {</div>
<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;        <span class="keywordtype">size_t</span> inputLen = srcLen * 2;</div>
<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;        <span class="keywordtype">short</span> *tempSrc = <span class="keyword">new</span> <span class="keywordtype">short</span>[srcLen];</div>
<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;        <a class="code" href="_algorithm_8h.html#a06f9a9fa653c88f36445cacf0ea7ad8d">copy_seq</a>(tempSrc, srcLen, src, srcLen);</div>
<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;        <span class="keywordtype">char</span> *instr = (<span class="keywordtype">char</span>*)tempSrc;</div>
<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;        <span class="keywordtype">char</span> *outstr = des;</div>
<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;        <span class="keywordtype">size_t</span> outSize = size;</div>
<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;        retSize = (size_t)iconv(handle, &amp;instr, &amp;inputLen, &amp;outstr, &amp;outSize);</div>
<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;        <span class="keywordflow">if</span> (retSize != (<span class="keywordtype">size_t</span>)-1)</div>
<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;        {</div>
<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;            retSize = size - outSize;</div>
<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;            des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = 0;</div>
<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;        }</div>
<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;        <span class="keyword">delete</span>[]tempSrc;</div>
<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;        iconv_close(handle);</div>
<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    }</div>
<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;    <span class="keywordflow">return</span> retSize;</div>
<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;}</div>
<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160; </div>
<div class="line"><a name="l00777"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a431b116518daffebc87c866b65aacfa2">  777</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a431b116518daffebc87c866b65aacfa2">ShareApi::WS_CPY_UTF8</a>(<span class="keywordtype">size_t</span> size, <span class="keywordtype">char</span> *des, <span class="keyword">const</span> <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a> *src)</div>
<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;{</div>
<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="namespace_share_api.html#ae6dfe98d6e51d6c8a3a612de99f840b2">UnicodeToUtf8</a>(des, size, src) == (<span class="keywordtype">size_t</span>)-1) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160; </div>
<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;}</div>
<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160; </div>
<div class="line"><a name="l00784"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ae6dfe98d6e51d6c8a3a612de99f840b2">  784</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#ae6dfe98d6e51d6c8a3a612de99f840b2">ShareApi::UnicodeToUtf8</a>(<span class="keywordtype">char</span>* des, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <a class="code" href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a>* src, <span class="keywordtype">size_t</span> srcLen <span class="comment">/* = 0 */</span>)</div>
<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;{</div>
<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    <span class="keywordtype">size_t</span> retSize = -1;</div>
<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    <span class="keywordflow">if</span> (srcLen == 0) srcLen = wcslen(src);</div>
<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    retSize = (size_t)::WideCharToMultiByte(CP_UTF8, 0, src, (<span class="keywordtype">int</span>)srcLen, des, (<a class="code" href="_find_file_8h.html#a37cc1038758216808d5f75090b093c9a">int</a>)size, NULL, NULL);</div>
<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = L<span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    iconv_t handle = iconv_open(<span class="stringliteral">&quot;UTF-8&quot;</span>, <span class="stringliteral">&quot;UCS-2LE&quot;</span>);</div>
<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="keywordflow">if</span> (-1 != (<span class="keywordtype">long</span>)handle)</div>
<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    {</div>
<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;        <span class="keywordtype">size_t</span> inputLen = srcLen * 2;</div>
<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;        <span class="keywordtype">short</span> *tempSrc = <span class="keyword">new</span> <span class="keywordtype">short</span>[srcLen];</div>
<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;        <a class="code" href="_algorithm_8h.html#a06f9a9fa653c88f36445cacf0ea7ad8d">copy_seq</a>(tempSrc, srcLen, src, srcLen);</div>
<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;        <span class="keywordtype">char</span> *instr = (<span class="keywordtype">char</span>*)tempSrc;</div>
<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;        <span class="keywordtype">char</span> *outstr = des;</div>
<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;        <span class="keywordtype">size_t</span> outSize = size;</div>
<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;        retSize = (size_t)iconv(handle, &amp;instr, &amp;inputLen, &amp;outstr, &amp;outSize);</div>
<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;        <span class="keywordflow">if</span> (retSize != (<span class="keywordtype">size_t</span>)-1)</div>
<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;        {</div>
<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;            retSize = size - outSize;</div>
<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;            des[<a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(retSize, size - 1)] = 0;</div>
<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;        }</div>
<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;        <span class="keyword">delete</span> []tempSrc;</div>
<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;        iconv_close(handle);</div>
<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;    }</div>
<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;    <span class="keywordflow">return</span> retSize;</div>
<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;}</div>
<div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160; </div>
<div class="line"><a name="l00814"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a042cb4f7a8ef64c76911a3c95caf3bb1">  814</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#a042cb4f7a8ef64c76911a3c95caf3bb1">ShareApi::lltoa</a>(<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> value, <span class="keywordtype">char</span> *szValue, <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;{</div>
<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    <span class="keywordflow">return</span> sprintf_s(szValue, size, <span class="stringliteral">&quot;%I64d&quot;</span>, value);</div>
<div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aabb8b876e7495cfb11a152cdf728815c">_snprintf</a>(szValue, size, <span class="stringliteral">&quot;%lld&quot;</span>, value);</div>
<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;}</div>
<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160; </div>
<div class="line"><a name="l00823"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ab284a7efaf7111e839b66df283157fea">  823</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#ab284a7efaf7111e839b66df283157fea">ShareApi::ultoa</a>(<a class="code" href="tools_8h.html#a57be03562867144161c1bfee95ca8f7c">UINT64</a> value, <span class="keywordtype">char</span> *szValue, <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;{</div>
<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    <span class="keywordflow">return</span> sprintf_s(szValue, size, <span class="stringliteral">&quot;%I64u&quot;</span>, value);</div>
<div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aabb8b876e7495cfb11a152cdf728815c">_snprintf</a>(szValue, size, <span class="stringliteral">&quot;%llu&quot;</span>, value);</div>
<div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;}</div>
<div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160; </div>
<div class="line"><a name="l00832"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a95bbd5d2f49d29511d8a53e60339ff08">  832</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#a95bbd5d2f49d29511d8a53e60339ff08">ShareApi::ltoa</a>(<a class="code" href="tools_8h.html#acbf03b87f07f587a6e72384c9141182a">long_t</a> value, <span class="keywordtype">char</span> *szValue, <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;{</div>
<div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;<span class="preprocessor">#   ifdef _WIN64</span></div>
<div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;        <span class="keywordflow">return</span> sprintf_s(szValue, size, <span class="stringliteral">&quot;%I64d&quot;</span>, value);</div>
<div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;<span class="preprocessor">#   else </span></div>
<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;        <span class="keywordflow">return</span> sprintf_s(szValue, size, <span class="stringliteral">&quot;%d&quot;</span>, value);</div>
<div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;<span class="preprocessor">#   endif</span></div>
<div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#a8514632137dc62e5830efc0921eaf1a5">sprintf_safe</a>(szValue, size, <span class="stringliteral">&quot;%ld&quot;</span>, value);</div>
<div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;}</div>
<div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160; </div>
<div class="line"><a name="l00845"></a><span class="lineno"><a class="line" href="namespace_share_api.html#afe403ffbb6f46bfd43aa404c5b462e7f">  845</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#afe403ffbb6f46bfd43aa404c5b462e7f">ShareApi::itoa</a>(<span class="keywordtype">int</span> value, <span class="keywordtype">char</span> *szValue, <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;{</div>
<div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;    <span class="keywordflow">return</span> sprintf_s(szValue, size, <span class="stringliteral">&quot;%d&quot;</span>, value);</div>
<div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#a8514632137dc62e5830efc0921eaf1a5">sprintf_safe</a>(szValue, size, <span class="stringliteral">&quot;%d&quot;</span>, value);</div>
<div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;}</div>
<div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160; </div>
<div class="line"><a name="l00854"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#a235ee25c210b288833c078fed20a9af1">  854</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="_share_api_8cpp.html#a235ee25c210b288833c078fed20a9af1">_trim_float_zero_</a>(<span class="keywordtype">char</span>* szValue, <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;{</div>
<div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    <span class="comment">// 去掉后面的0,但至少保留一位小数点</span></div>
<div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;    <span class="keywordflow">while</span> (size &gt; 0)</div>
<div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;    {</div>
<div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;        <span class="keywordflow">if</span> (szValue[size - 1] == <span class="charliteral">&#39;0&#39;</span> &amp;&amp; szValue[size - 2] != <span class="charliteral">&#39;.&#39;</span>){</div>
<div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;            szValue[--size] = <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;        }<span class="keywordflow">else</span>{</div>
<div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;            <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;        }</div>
<div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;    }</div>
<div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;    <span class="keywordflow">return</span> size;</div>
<div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;}</div>
<div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160; </div>
<div class="line"><a name="l00868"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ac170c14f06c9eaa6710df7726e475908">  868</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#ac170c14f06c9eaa6710df7726e475908">ShareApi::ftoa</a>(<span class="keywordtype">float</span> value, <span class="keywordtype">char</span> *szValue, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> dotcount)</div>
<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;{</div>
<div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;    <span class="comment">/*if (size &lt;= 0) return 0;</span></div>
<div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;<span class="comment">    int n = (int)std::abs(value), tmp;</span></div>
<div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;<span class="comment">    int iPos = 0, iStartPos = 0;</span></div>
<div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;<span class="comment">    if (value &lt; MINUX_FLT_DOT){</span></div>
<div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;<span class="comment">        szValue[iPos++] = &#39;-&#39;;</span></div>
<div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;<span class="comment">        ++iStartPos;</span></div>
<div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;<span class="comment">    }</span></div>
<div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;<span class="comment">    value = std::abs(value);</span></div>
<div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;<span class="comment">    value -= (float)n;</span></div>
<div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;<span class="comment">    while (n &gt; 0)</span></div>
<div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;<span class="comment">    {</span></div>
<div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;<span class="comment">        tmp = n % 10;</span></div>
<div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;<span class="comment">        n /= 10;</span></div>
<div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;<span class="comment">        if (iPos &lt; size){</span></div>
<div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;<span class="comment">            szValue[iPos++] = tmp + &#39;0&#39;;</span></div>
<div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;<span class="comment">        }else{</span></div>
<div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;<span class="comment">            break;</span></div>
<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;<span class="comment">        }</span></div>
<div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;<span class="comment">    }</span></div>
<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;<span class="comment">    if (iPos == 0 || (iPos == 1 &amp;&amp; iStartPos == 1))</span></div>
<div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;<span class="comment">    {</span></div>
<div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;<span class="comment">        if (iPos &lt; size){</span></div>
<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;<span class="comment">            szValue[iPos++] = &#39;0&#39;;</span></div>
<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;<span class="comment">        }</span></div>
<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;<span class="comment">    }</span></div>
<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;<span class="comment">    std::reverse(szValue + iStartPos, szValue + iPos);</span></div>
<div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;<span class="comment">    if (iPos &lt; size){</span></div>
<div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;<span class="comment">        szValue[iPos++] = &#39;.&#39;;</span></div>
<div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;<span class="comment">    }</span></div>
<div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;<span class="comment">    dotcount = min(dotcount, FLT_DOT_COUNT);</span></div>
<div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;<span class="comment">    while (dotcount &gt; 0)</span></div>
<div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;<span class="comment">    {</span></div>
<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;<span class="comment">        value *= 10.f;</span></div>
<div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;<span class="comment">        --dotcount;</span></div>
<div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;<span class="comment">    }</span></div>
<div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;<span class="comment">    n = (int)value;</span></div>
<div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;<span class="comment">    n = (value - (float)n) * 10 &gt; 5 ? n + 1: n;</span></div>
<div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;<span class="comment">    iStartPos = iPos;</span></div>
<div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;<span class="comment">    while (n &gt; 0)</span></div>
<div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;<span class="comment">    {</span></div>
<div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;<span class="comment">        tmp = n % 10;</span></div>
<div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;<span class="comment">        n /= 10;</span></div>
<div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;<span class="comment">        if (iPos &lt; size){</span></div>
<div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;<span class="comment">            szValue[iPos++] = tmp + &#39;0&#39;;</span></div>
<div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;<span class="comment">        }else{</span></div>
<div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;<span class="comment">            break;</span></div>
<div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;<span class="comment">        }</span></div>
<div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;<span class="comment">    }</span></div>
<div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;<span class="comment">    // 至少保留一位0</span></div>
<div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;<span class="comment">    if (iStartPos == iPos &amp;&amp; iPos &lt; size){</span></div>
<div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;<span class="comment">        szValue[iPos++] = &#39;0&#39;;</span></div>
<div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;<span class="comment">    }</span></div>
<div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;<span class="comment">    std::reverse(szValue + iStartPos, szValue + iPos);</span></div>
<div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;<span class="comment">    if (size &gt; 0)</span></div>
<div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;<span class="comment">    {</span></div>
<div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;<span class="comment">        iPos = (iPos &lt; size) ? iPos : size - 1;</span></div>
<div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;<span class="comment">        szValue[iPos] = 0;</span></div>
<div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;<span class="comment">    }</span></div>
<div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;<span class="comment">    _trim_float_zero_(szValue, iPos);</span></div>
<div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;<span class="comment">    return iPos;*/</span></div>
<div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;    dotcount = <a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(dotcount, (<span class="keywordtype">size_t</span>)<a class="code" href="tools_8h.html#a9832b3ede9aaf61eccff792b9132616d">FLT_DOT_COUNT</a>);</div>
<div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespace_share_api.html#aceaa3079fafcc01a4e994851d7b19b18">lftoa</a>(value, szValue, size, dotcount);</div>
<div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;}</div>
<div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160; </div>
<div class="line"><a name="l00946"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aceaa3079fafcc01a4e994851d7b19b18">  946</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#aceaa3079fafcc01a4e994851d7b19b18">ShareApi::lftoa</a>(<span class="keywordtype">double</span> value, <span class="keywordtype">char</span> *szValue, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> dotcount)</div>
<div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;{</div>
<div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespace_share_api.html#aad0f12d8a89ce1a3ac07b25be7d4dca8">llftoa</a>((<span class="keywordtype">long</span> <span class="keywordtype">double</span>)value, szValue, size, dotcount);</div>
<div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;}</div>
<div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160; </div>
<div class="line"><a name="l00951"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aad0f12d8a89ce1a3ac07b25be7d4dca8">  951</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#aad0f12d8a89ce1a3ac07b25be7d4dca8">ShareApi::llftoa</a>(<span class="keywordtype">long</span> <span class="keywordtype">double</span> value, <span class="keywordtype">char</span> *szValue, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> dotcount)</div>
<div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;{</div>
<div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;    <span class="keywordflow">if</span> (size &lt;= 0) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160; </div>
<div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;    <span class="keywordtype">long</span> <span class="keywordtype">long</span> n = (<span class="keywordtype">long</span> long)std::fabs(value), tmp;</div>
<div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;    <span class="keywordtype">size_t</span> iPos = 0, iStartPos = 0;</div>
<div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;    <span class="keywordflow">if</span> (value &lt;= <a class="code" href="tools_8h.html#a4e9d5b8d36af265f708cc1e3824712e5">MINUX_DOE_DOT</a>)</div>
<div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;    {</div>
<div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;        szValue[iPos++] = <span class="charliteral">&#39;-&#39;</span>;</div>
<div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;        ++iStartPos;</div>
<div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;    }</div>
<div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;    value = std::fabs(value);</div>
<div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;    value -= (<span class="keywordtype">long</span> double)n;</div>
<div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160; </div>
<div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;    <span class="keywordflow">while</span> (n &gt; 0)</div>
<div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;    {</div>
<div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;        tmp = n % 10;</div>
<div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;        n /= 10;</div>
<div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;        <span class="keywordflow">if</span> (iPos &lt; size){</div>
<div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;            szValue[iPos++] = (char)(tmp + <span class="charliteral">&#39;0&#39;</span>);</div>
<div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;        }<span class="keywordflow">else</span>{</div>
<div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;            <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;        }</div>
<div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;    }</div>
<div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160; </div>
<div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;    <span class="keywordflow">if</span> (iPos == 0 || (iPos == 1 &amp;&amp; iStartPos == 1))</div>
<div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;    {</div>
<div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;        <span class="keywordflow">if</span> (iPos &lt; size){</div>
<div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;            szValue[iPos++] = <span class="charliteral">&#39;0&#39;</span>;</div>
<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;        }</div>
<div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;    }</div>
<div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160; </div>
<div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;    std::reverse(szValue + iStartPos, szValue + iPos);</div>
<div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;    <span class="keywordflow">if</span> (iPos &lt; size){</div>
<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;        szValue[iPos++] = <span class="charliteral">&#39;.&#39;</span>;</div>
<div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    }</div>
<div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160; </div>
<div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;    dotcount = <a class="code" href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a>(dotcount, (<span class="keywordtype">size_t</span>)<a class="code" href="tools_8h.html#a9e181d2bb4fac187cebfbb1445795120">DOE_DOT_COUNT</a>);</div>
<div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;    <span class="keywordflow">while</span> (dotcount &gt; 0)</div>
<div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;    {</div>
<div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;        value *= 10.f;</div>
<div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;        --dotcount;</div>
<div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;        <span class="keywordflow">if</span> (value &lt; 1.f &amp;&amp; iPos &lt; size){</div>
<div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;            szValue[iPos++] = <span class="charliteral">&#39;0&#39;</span>;</div>
<div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;        }</div>
<div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;    }</div>
<div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160; </div>
<div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;    n = (<span class="keywordtype">long</span> long)value;</div>
<div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;    n = (value - (<span class="keywordtype">long</span> double)n) * 10 &gt; 5 ? n + 1 : n;</div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; </div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;    iStartPos = iPos;</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;    <span class="keywordflow">while</span> (n &gt; 0)</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    {</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;        tmp = n % 10;</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;        n /= 10;</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;        <span class="keywordflow">if</span> (iPos &lt; size){</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;            szValue[iPos++] = (char)(tmp + <span class="charliteral">&#39;0&#39;</span>);</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;        }<span class="keywordflow">else</span>{</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;            <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;        }</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;    }</div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;    <span class="comment">// 至少保留一位0</span></div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;    <span class="keywordflow">if</span> (iStartPos == iPos &amp;&amp; iPos &lt; size){</div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;        szValue[iPos++] = <span class="charliteral">&#39;0&#39;</span>;</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    }</div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    std::reverse(szValue + iStartPos, szValue + iPos);</div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; </div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;    <span class="keywordflow">if</span> (size &gt; 0)</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;    {</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;        iPos = (iPos &lt; size) ? iPos : size - 1;</div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;        szValue[iPos] = 0;</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;    }</div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; </div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;    <a class="code" href="_share_api_8cpp.html#a235ee25c210b288833c078fed20a9af1">_trim_float_zero_</a>(szValue, iPos);</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; </div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;    <span class="keywordflow">return</span> (<span class="keywordtype">int</span>)iPos;</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;}</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; </div>
<div class="line"><a name="l01029"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a42cc4f5c3ce6a37fa32f97be13c5d300"> 1029</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="namespace_share_api.html#a42cc4f5c3ce6a37fa32f97be13c5d300">ShareApi::strnicmp</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str1, <span class="keyword">const</span> <span class="keywordtype">char</span> *str2, <span class="keywordtype">size_t</span> count)</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;{</div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;    <span class="keywordflow">if</span> (str1 == NULL &amp;&amp; str2 == NULL)</div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;    {</div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;        <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;    }</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str1 == NULL &amp;&amp; str2 != NULL)</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;    {</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;        <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    }</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str1 != NULL &amp;&amp; str2 == NULL)</div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;    {</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;        <span class="keywordflow">return</span> 1;</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;    }</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; </div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;    <span class="keywordflow">while</span> (count &gt; 0)</div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;    {</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;        <span class="keywordflow">if</span> (*str1 == <span class="charliteral">&#39;\0&#39;</span> || *str2 == <span class="charliteral">&#39;\0&#39;</span>)</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;        {</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;            <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;        }</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; </div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;        <span class="keywordflow">if</span> (toupper(*str1) != toupper(*str2))</div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;        {</div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;            <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;        }</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;        ++str1;</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;        ++str2;</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;        --count;</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;    }</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; </div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;    <span class="keywordtype">int</span> nRet = 0;</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; </div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;    <span class="keywordflow">if</span> (count == 0)</div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;    {</div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;        nRet = 0;</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;    }</div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;    {</div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;        <span class="keywordflow">if</span> (*str1 != <span class="charliteral">&#39;\0&#39;</span> &amp;&amp; *str2 != <span class="charliteral">&#39;\0&#39;</span>)</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;        {</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;            <span class="keywordflow">if</span> (toupper(*str1) &gt; toupper(*str2))</div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;            {</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;                nRet = 1;</div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;            }</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (toupper(*str1) &lt; toupper(*str2))</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;            {</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;                nRet = -1;</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;            }</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;        }</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*str1 == <span class="charliteral">&#39;\0&#39;</span> &amp;&amp; *str2 != <span class="charliteral">&#39;\0&#39;</span>)</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;        {</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;            nRet = -1;</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;        }</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*str1 != <span class="charliteral">&#39;\0&#39;</span> &amp;&amp; *str2 == <span class="charliteral">&#39;\0&#39;</span>)</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;        {</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;            nRet = 1;</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;        }</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    }</div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; </div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    <span class="keywordflow">return</span> nRet;</div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;}</div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; </div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;<span class="comment">/********************** 线程相关(start) ***********************/</span></div>
<div class="line"><a name="l01093"></a><span class="lineno"><a class="line" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html"> 1093</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html">__INLINE_THREAD_DATA</a></div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;{</div>
<div class="line"><a name="l01095"></a><span class="lineno"><a class="line" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#abbd9ad559e3b54fed535ae26a7ae016b"> 1095</a></span>&#160;    <span class="keywordtype">void</span> *<a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#abbd9ad559e3b54fed535ae26a7ae016b">arg</a>;  <span class="comment">// 线程函数参数</span></div>
<div class="line"><a name="l01096"></a><span class="lineno"><a class="line" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a6ad0e45abc99f124480f84d5ac27d82f"> 1096</a></span>&#160;    <a class="code" href="tools_8h.html#a8c4b94ef011acbcc6359107d2efb3d25">ThreadRoutine</a> <a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a6ad0e45abc99f124480f84d5ac27d82f">pThreadFunc</a>;  <span class="comment">// 线程函数指针</span></div>
<div class="line"><a name="l01097"></a><span class="lineno"><a class="line" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a63ae5ddd3ec594ee47d198605df9d59f"> 1097</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a63ae5ddd3ec594ee47d198605df9d59f">bSuspend</a>;</div>
<div class="line"><a name="l01098"></a><span class="lineno"><a class="line" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a8d5c94cdde539635b121b9fbb791ccd4"> 1098</a></span>&#160;    <a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a8d5c94cdde539635b121b9fbb791ccd4">__INLINE_THREAD_DATA</a>(<span class="keywordtype">void</span>* value, <a class="code" href="tools_8h.html#a8c4b94ef011acbcc6359107d2efb3d25">ThreadRoutine</a> func, <span class="keywordtype">size_t</span> suspend)</div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;    {</div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;        <a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#abbd9ad559e3b54fed535ae26a7ae016b">arg</a> = value;</div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;        <a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a6ad0e45abc99f124480f84d5ac27d82f">pThreadFunc</a> = func;</div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;        <a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a63ae5ddd3ec594ee47d198605df9d59f">bSuspend</a> = suspend;</div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;    }</div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;}<a class="code" href="_share_api_8cpp.html#a571aeeb0d690e1b41abe8f9caf9ba3f7">_INLINE_THREAD_DATA</a>, *<a class="code" href="_share_api_8cpp.html#ae664793a10c03e8275ff3005e6774741">_PINLINE_THREAD_DATA</a>;</div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; </div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;<span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="tools_8h.html#a3107b1d0ca10d4ae4575d9107d4cbffe">_stdcall</a> _windows_start_address(<span class="keywordtype">void</span>* arg)</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;{</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;    <a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html">_PINLINE_THREAD_DATA</a> pData = (<a class="code" href="_share_api_8cpp.html#ae664793a10c03e8275ff3005e6774741">_PINLINE_THREAD_DATA</a>)arg;</div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwThreadRet = pData-&gt;<a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a6ad0e45abc99f124480f84d5ac27d82f">pThreadFunc</a>(pData-&gt;<a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#abbd9ad559e3b54fed535ae26a7ae016b">arg</a>);</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;    <span class="keyword">delete</span> pData;</div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;    pData = NULL;</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    ::_endthreadex(dwThreadRet);</div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;    <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;}</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01117"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#a7b71d089bec423a820d2986beb4f2de4"> 1117</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span>* <a class="code" href="tools_8h.html#a3107b1d0ca10d4ae4575d9107d4cbffe">_stdcall</a> <a class="code" href="_share_api_8cpp.html#a7b71d089bec423a820d2986beb4f2de4">_linux_start_routine</a>(<span class="keywordtype">void</span>* arg)</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;{</div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;    <a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html">_PINLINE_THREAD_DATA</a> pData = (<a class="code" href="_share_api_8cpp.html#ae664793a10c03e8275ff3005e6774741">_PINLINE_THREAD_DATA</a>)arg;</div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;    pData-&gt;<a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a6ad0e45abc99f124480f84d5ac27d82f">pThreadFunc</a>(pData-&gt;<a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#abbd9ad559e3b54fed535ae26a7ae016b">arg</a>);</div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;    <span class="keyword">delete</span> pData;</div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;    pData = NULL;</div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;}</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; </div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;<span class="comment">// 创建线程</span></div>
<div class="line"><a name="l01128"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ad16c6f67ce210b5dd91e57bbf743f0d7"> 1128</a></span>&#160;<a class="code" href="tools_8h.html#ad5d1d4448f0dd70f644916217fa0f5d6">THREADPTR</a> <a class="code" href="namespace_share_api.html#ad16c6f67ce210b5dd91e57bbf743f0d7">ShareApi::BeginThread</a>(<a class="code" href="tools_8h.html#a8c4b94ef011acbcc6359107d2efb3d25">ThreadRoutine</a> pFunc, <span class="keywordtype">void</span>* arg, <a class="code" href="tools_8h.html#a36cb3b01d81ffd844bbbfb54003e06ec">UINT</a> stack_size <span class="comment">/* = 0 */</span>, <a class="code" href="tools_8h.html#af632da489ebc3708ec3ab6791ee53fa4">ULONG</a>* pThreadId <span class="comment">/* = NULL */</span>)</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;{</div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    <a class="code" href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html">_INLINE_THREAD_DATA</a> *pInfo = <span class="keyword">new</span> <a class="code" href="_share_api_8cpp.html#a571aeeb0d690e1b41abe8f9caf9ba3f7">_INLINE_THREAD_DATA</a>(arg, pFunc, 0);</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; </div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;    <span class="keywordflow">if</span> (stack_size &lt;= 0){</div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;        stack_size = <a class="code" href="tools_8h.html#a7ffc5eed915079f22f24d5ac0b81a2cb">THREAD_STACK_MIN</a>;</div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;    }</div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;    <a class="code" href="tools_8h.html#ad5d1d4448f0dd70f644916217fa0f5d6">THREADPTR</a> thHandle = 0;</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;    <span class="comment">// 创建常规线程</span></div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;    thHandle = _beginthreadex(NULL, stack_size, &amp;_windows_start_address, pInfo, 0, (<a class="code" href="tools_8h.html#a36cb3b01d81ffd844bbbfb54003e06ec">UINT</a>*)pThreadId);</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;    <span class="keywordflow">if</span> (thHandle &lt;= 0) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; </div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;    <a class="code" href="tools_8h.html#ad5d1d4448f0dd70f644916217fa0f5d6">THREADPTR</a> thHandle = 0;</div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;    pthread_attr_t attr;</div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;    <span class="keywordtype">int</span> iRet = pthread_attr_init(&amp;attr);</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;    <span class="keywordflow">if</span> (iRet == 0)</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;    {</div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;        <span class="keywordflow">if</span> (pthread_attr_setstacksize(&amp;attr, stack_size) == 0)</div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;        {</div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;            <span class="keywordflow">if</span> (pthread_create(&amp;thHandle, &amp;attr, &amp;<a class="code" href="_share_api_8cpp.html#a7b71d089bec423a820d2986beb4f2de4">_linux_start_routine</a>, (<span class="keywordtype">void</span>*)pInfo) != 0)</div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;            {</div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;                iRet = 99;</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;            }</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;        }<span class="comment">// if 设置化栈大小</span></div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;        pthread_attr_destroy(&amp;attr);</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;    }<span class="comment">// if 初始化属性</span></div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; </div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;    <span class="keywordflow">if</span> (iRet &gt; 0) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pThreadId) *pThreadId = thHandle;</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;    <span class="keywordflow">return</span> thHandle;</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;}</div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; </div>
<div class="line"><a name="l01163"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aa247d107f7e439e2c6871dfba195a022"> 1163</a></span>&#160;<a class="code" href="tools_8h.html#af632da489ebc3708ec3ab6791ee53fa4">ULONG</a> <a class="code" href="namespace_share_api.html#aa247d107f7e439e2c6871dfba195a022">ShareApi::GetCurrentThreadId</a>()</div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;{</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;    <a class="code" href="namespace_share_api.html#aa247d107f7e439e2c6871dfba195a022">return ::GetCurrentThreadId</a>();</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;    <span class="keywordflow">return</span> (<a class="code" href="tools_8h.html#af632da489ebc3708ec3ab6791ee53fa4">ULONG</a>)::pthread_self();</div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;}</div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; </div>
<div class="line"><a name="l01172"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a5f2e8e67d4a3a8d061bd8f109762a48d"> 1172</a></span>&#160;<a class="code" href="tools_8h.html#af632da489ebc3708ec3ab6791ee53fa4">ULONG</a> <a class="code" href="namespace_share_api.html#a5f2e8e67d4a3a8d061bd8f109762a48d">ShareApi::GetCurrentProcessId</a>()</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;{</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;    <a class="code" href="namespace_share_api.html#a5f2e8e67d4a3a8d061bd8f109762a48d">return ::GetCurrentProcessId</a>();</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    <span class="keywordflow">return</span> (<a class="code" href="tools_8h.html#af632da489ebc3708ec3ab6791ee53fa4">ULONG</a>)::getpid();</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;}</div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; </div>
<div class="line"><a name="l01181"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a7a89280226b06d9a20b2b37316742d60"> 1181</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a7a89280226b06d9a20b2b37316742d60">ShareApi::CloseThread</a>(<a class="code" href="tools_8h.html#ad5d1d4448f0dd70f644916217fa0f5d6">THREADPTR</a> thHandle)</div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;{</div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;    ::CloseHandle((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)thHandle);</div>
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;    ::pthread_detach(thHandle);</div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;}</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; </div>
<div class="line"><a name="l01190"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ac7a2d28aa9970323f90bf16ad0e039ac"> 1190</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#ac7a2d28aa9970323f90bf16ad0e039ac">ShareApi::Thread_Join</a>(<a class="code" href="tools_8h.html#ad5d1d4448f0dd70f644916217fa0f5d6">THREADPTR</a> thHandle)</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;{</div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;    <span class="keywordflow">if</span> (!thHandle) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;    <span class="comment">// windows使用等待线程句柄有信号方式</span></div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;    <span class="keywordflow">if</span> (::WaitForSingleObject((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)thHandle, <a class="code" href="tools_8h.html#aa84a29002ab81c719c0d07bb446296e0">INFINITE</a>) != <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a>)</div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    {</div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;    }</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;    <span class="keywordflow">if</span> (pthread_join(thHandle, NULL) != 0)</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;    {</div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;    }</div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;}</div>
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment">/********************** 线程相关(end) ***********************/</span></div>
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; </div>
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="comment">/********************** 同步相关(start) ***********************/</span></div>
<div class="line"><a name="l01210"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a1a12fe17284d65b76175e2ea80279f9e"> 1210</a></span>&#160;<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> <a class="code" href="namespace_share_api.html#a1a12fe17284d65b76175e2ea80279f9e">ShareApi::CreateMutex</a>()</div>
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;{</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;    <a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">PMTINFO</a> hMutex = (<a class="code" href="____tools_8h.html#a5426e8dc0277759ec246d58996aa8e65">PMTINFO</a>)malloc(<span class="keyword">sizeof</span>(<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">MTINFO</a>));</div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    <span class="keywordflow">if</span> (!hMutex) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;    memset(hMutex, 0, <span class="keyword">sizeof</span>(*hMutex));</div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;    ::InitializeCriticalSection(&amp;(hMutex-&gt;<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html#a065ba05c5c3dc66fee5a4a7f5172618b">mutex</a>));</div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;    <span class="keywordflow">if</span> (pthread_mutex_init(&amp;(hMutex-&gt;<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html#a065ba05c5c3dc66fee5a4a7f5172618b">mutex</a>), NULL))</div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;    {</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;        <span class="keywordtype">int</span> err = errno;</div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;        free(hMutex);</div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;        errno = err;</div>
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;        hMutex = NULL;</div>
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    }</div>
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    <span class="keywordflow">return</span> ((<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a>)hMutex);</div>
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;}</div>
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; </div>
<div class="line"><a name="l01229"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a87b8d6d01e677432b988eef8ce62c3fb"> 1229</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a87b8d6d01e677432b988eef8ce62c3fb">ShareApi::MutexLock</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hMutex)</div>
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;{</div>
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;    ::EnterCriticalSection(&amp;(((<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">PMTINFO</a>)hMutex)-&gt;mutex));</div>
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;    pthread_mutex_lock(&amp;(((<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">PMTINFO</a>)hMutex)-&gt;mutex));</div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;}</div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; </div>
<div class="line"><a name="l01238"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ae5ba1f54275e01ae695344690c8e5f40"> 1238</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#ae5ba1f54275e01ae695344690c8e5f40">ShareApi::MutexUnlock</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hMutex)</div>
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;{</div>
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;    ::LeaveCriticalSection(&amp;(((<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">PMTINFO</a>)hMutex)-&gt;mutex));</div>
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;    pthread_mutex_unlock(&amp;(((<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">PMTINFO</a>)hMutex)-&gt;mutex));</div>
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;}</div>
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; </div>
<div class="line"><a name="l01247"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a8f77f0ed93c1add64d17085612759c2e"> 1247</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a8f77f0ed93c1add64d17085612759c2e">ShareApi::CloseMutex</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hMutex)</div>
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;{</div>
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;    ::DeleteCriticalSection(&amp;(((<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">PMTINFO</a>)hMutex)-&gt;mutex));</div>
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;    pthread_mutex_destroy(&amp;(((<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">PMTINFO</a>)hMutex)-&gt;mutex));</div>
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;    free((<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">PMTINFO</a>)hMutex);</div>
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;}</div>
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; </div>
<div class="line"><a name="l01257"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a7b6335c0eefe4ed1f01963638bc708b8"> 1257</a></span>&#160;<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> <a class="code" href="namespace_share_api.html#a7b6335c0eefe4ed1f01963638bc708b8">ShareApi::CreateEvent</a>(<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> bEvent <span class="comment">/* = FALSE */</span>, <a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> bAuto <span class="comment">/* = TRUE */</span>)</div>
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;{</div>
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;    <a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hEvent = 0;</div>
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwFlag = 0;</div>
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;    <span class="keywordflow">if</span> (bEvent) dwFlag |= CREATE_EVENT_INITIAL_SET;</div>
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;    <span class="keywordflow">if</span> (!bAuto) dwFlag |= CREATE_EVENT_MANUAL_RESET;</div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;    hEvent = (<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a>)::CreateEventEx(NULL, NULL, dwFlag, EVENT_ALL_ACCESS);</div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;    <a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a> efd = (<a class="code" href="____tools_8h.html#aed7a8fbfa2ff233f4bb75136e358354b">PEVENTFD</a>)malloc(<span class="keyword">sizeof</span>(<a class="code" href="struct___e_v_e_n_t_f_d.html">EVENTFD</a>));</div>
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;    <span class="keywordflow">if</span> (!efd){</div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;        <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;    }</div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; </div>
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;    <span class="comment">// 创建事件fd</span></div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;    efd-&gt;<a class="code" href="struct___e_v_e_n_t_f_d.html#af93a0d73c7421ef80e168c305dd913e5">efd</a> = eventfd(0, EFD_CLOEXEC);</div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;    <span class="keywordflow">if</span> (efd-&gt;<a class="code" href="struct___e_v_e_n_t_f_d.html#af93a0d73c7421ef80e168c305dd913e5">efd</a> == -1)</div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;    {</div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;        <span class="keywordtype">int</span> error = errno;</div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;        perror(<span class="stringliteral">&quot;eventfd failed!&quot;</span>);</div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;        free(efd);</div>
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;        errno = error;</div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;        <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;    }</div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;    efd-&gt;<a class="code" href="struct___e_v_e_n_t_f_d.html#a9f69ebc6edc2c4cea9a240ce922bc485">bEvent</a> = bEvent;</div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;    efd-&gt;<a class="code" href="struct___e_v_e_n_t_f_d.html#ac91577373328fecd20b241ea52602ba5">waitcount</a> = 0;</div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;    efd-&gt;<a class="code" href="struct___e_v_e_n_t_f_d.html#ae77ae0efd015b180d711e7f84dd91ced">bAuto</a> = bAuto;</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; </div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;    hEvent = (<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a>)efd;</div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; </div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;    <span class="keywordflow">return</span> hEvent;</div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;}</div>
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; </div>
<div class="line"><a name="l01291"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aef9c08d248e17a517235723ef2db9663"> 1291</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#aef9c08d248e17a517235723ef2db9663">ShareApi::SetEvent</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hEvent, <a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> bEvent)</div>
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;{</div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;    <span class="keywordflow">if</span> (!hEvent) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;    <span class="keywordflow">if</span>(bEvent){</div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;        <a class="code" href="namespace_share_api.html#aef9c08d248e17a517235723ef2db9663">::SetEvent</a>((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hEvent);</div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;    }<span class="keywordflow">else</span>{</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;        ::ResetEvent((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hEvent);</div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;    }</div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;    <a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a> efd = (<a class="code" href="____tools_8h.html#aed7a8fbfa2ff233f4bb75136e358354b">PEVENTFD</a>)hEvent;</div>
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; </div>
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;    <span class="comment">// 先置事件后写入值</span></div>
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;    <a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> bOldValue = <a class="code" href="namespace_share_api.html#aa020decf062bbd8dc399dd69c67a1d5b">ShareApi::InterlockedExchange</a>((<span class="keywordtype">int</span>*)(&amp;(efd-&gt;<a class="code" href="struct___e_v_e_n_t_f_d.html#a9f69ebc6edc2c4cea9a240ce922bc485">bEvent</a>)), bEvent);</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;    <span class="keywordflow">if</span>(bEvent &amp;&amp; !bOldValue)</div>
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;    {</div>
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;        <a class="code" href="tools_8h.html#a57be03562867144161c1bfee95ca8f7c">UINT64</a> waitcount = 1;</div>
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;        <span class="comment">// read(efd-&gt;efd, &amp;waitcount, sizeof(waitcount)); // 对数据清零,这里去除</span></div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;        <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#a57be03562867144161c1bfee95ca8f7c">UINT64</a>) != write(efd-&gt;<a class="code" href="struct___e_v_e_n_t_f_d.html#af93a0d73c7421ef80e168c305dd913e5">efd</a>, &amp;waitcount, <span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#a57be03562867144161c1bfee95ca8f7c">UINT64</a>)))</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;        {</div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;            perror(<span class="stringliteral">&quot;SetEvent write error&quot;</span>);</div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;            <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;        }</div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;    }</div>
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;}</div>
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; </div>
<div class="line"><a name="l01319"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a13ed8016535f6825c83eedef069ebe41"> 1319</a></span>&#160;<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> <a class="code" href="namespace_share_api.html#a13ed8016535f6825c83eedef069ebe41">ShareApi::WaitForSingleEvent</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hEvent, <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwWait)</div>
<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;{</div>
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;    <span class="keywordflow">if</span> (!hEvent) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>;</div>
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; </div>
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwRet = <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a>;</div>
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;    dwRet = ::WaitForSingleObject((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hEvent, dwWait);</div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;    dwRet = <a class="code" href="namespace_share_api.html#a13aef8d6aaac3071ccedf693c7d03f27">ShareApi::WaitForMultipleEvents</a>(&amp;hEvent, 1, <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>, dwWait);</div>
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;    <span class="keywordflow">return</span> dwRet;</div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;}</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; </div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="preprocessor">#ifdef LINUX</span></div>
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;<span class="comment">// 检查所有事件是否都有信号</span></div>
<div class="line"><a name="l01334"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#a46806acd910e12ac9b1817fffd16088e"> 1334</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_share_api_8cpp.html#a46806acd910e12ac9b1817fffd16088e">__CheckAllEvent</a>(<a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a> *pEvent, <span class="keywordtype">int</span> nEventCount)</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;{</div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;    <span class="keywordflow">while</span> (--nEventCount &gt;= 0)</div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;    {</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;        <span class="keywordflow">if</span> (!pEvent[nEventCount]-&gt;bEvent)</div>
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;        {</div>
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;        }</div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;    }</div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;}</div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;<span class="comment">// 检查是否有事件信号的存在</span></div>
<div class="line"><a name="l01346"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#aa429fd44d991e54973173c58666b655d"> 1346</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="_share_api_8cpp.html#aa429fd44d991e54973173c58666b655d">__CheckEvent</a>(<a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a> *pEvent, <span class="keywordtype">int</span> nEventCount)</div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;{</div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;    <span class="keywordflow">while</span> (--nEventCount &gt;= 0)</div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;    {</div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;        <span class="keywordflow">if</span> (pEvent[nEventCount]-&gt;bEvent)</div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;        {</div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;            <span class="keywordflow">return</span> nEventCount;</div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;        }</div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;    }</div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;    <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;}</div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; </div>
<div class="line"><a name="l01358"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#acea67912e789b238c7cada81b7b07b8e"> 1358</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="_share_api_8cpp.html#acea67912e789b238c7cada81b7b07b8e">__SetSelectEvent</a>(<a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a> *pEvent, <span class="keywordtype">int</span> nEventCount, fd_set *rset, fd_set *eset, std::map&lt;int, PEVENTFD*&gt;&amp; mefds)</div>
<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;{</div>
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;    <span class="keywordtype">int</span> maxfd = 0;</div>
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;    mefds.clear();</div>
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;    <span class="keywordflow">while</span>(--nEventCount &gt;= 0)</div>
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;    {</div>
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;        <span class="keywordflow">if</span>(!(pEvent[nEventCount]-&gt;bEvent))</div>
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;        {</div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;            FD_SET(pEvent[nEventCount]-&gt;efd, rset);</div>
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;            FD_SET(pEvent[nEventCount]-&gt;efd, eset);</div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;            maxfd = std::max(maxfd, pEvent[nEventCount]-&gt;efd);</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;            mefds.insert(std::make_pair(pEvent[nEventCount]-&gt;efd, &amp;(pEvent[nEventCount])));</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;        }</div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;    }</div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; </div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;    <span class="keywordflow">return</span> maxfd;</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;}</div>
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; </div>
<div class="line"><a name="l01376"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#a98b540b0b01c13424dda5763a9c99fb9"> 1376</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="_share_api_8cpp.html#a98b540b0b01c13424dda5763a9c99fb9">__ReadEfdInfo</a>(std::map&lt;int,PEVENTFD*&gt;&amp; mefds, fd_set *rset, fd_set *eset, <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> &amp;dwRet, <a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a>* efds)</div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;{</div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;    <span class="keywordtype">int</span> nRet = 0;</div>
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;    <span class="keywordflow">for</span>(std::map&lt;int,PEVENTFD*&gt;::iterator it = mefds.begin(); it != mefds.end(); ++it)</div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;    {</div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;        <span class="keywordflow">if</span> (FD_ISSET((*(it-&gt;second))-&gt;efd, rset))</div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;        {</div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;            <a class="code" href="tools_8h.html#a57be03562867144161c1bfee95ca8f7c">UINT64</a> uv = 0;</div>
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;            <span class="comment">// 若有多个等待则开启惊群操作</span></div>
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;            <span class="keywordtype">bool</span> thundering_herd = ((*(it-&gt;second))-&gt;waitcount &gt; 0) ? <span class="keyword">true</span> : <span class="keyword">false</span>;</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;            <span class="keywordflow">if</span> (read((*(it-&gt;second))-&gt;efd, &amp;uv, <span class="keyword">sizeof</span>(uv)) &lt; 0){</div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;                perror(<span class="stringliteral">&quot;read efd failed!&quot;</span>);</div>
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;            }</div>
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;            <span class="comment">// 惊群</span></div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;            <span class="keywordflow">if</span>(thundering_herd)</div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;            {</div>
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;                uv = (<a class="code" href="tools_8h.html#a57be03562867144161c1bfee95ca8f7c">UINT64</a>)(*(it-&gt;second))-&gt;waitcount;</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;                <span class="keywordflow">if</span> (write((*(it-&gt;second))-&gt;efd, &amp;uv, <span class="keyword">sizeof</span>(uv)) &lt; 0) {</div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;                    perror(<span class="stringliteral">&quot;write efd failed!&quot;</span>);</div>
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;                }</div>
<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;            }</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; </div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;            ++nRet;</div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;            <span class="comment">// 在不清除错误信息的前提下保留第一个有事件的位置</span></div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;            <span class="keywordflow">if</span>(dwRet != <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>)</div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;            {</div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;                <span class="keywordflow">if</span>(nRet == 1){</div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;                    dwRet = it-&gt;second - efds + <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a>;</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;                }</div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;            }</div>
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;        }</div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(FD_ISSET((*(it-&gt;second))-&gt;efd, eset))</div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;        {</div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;            <span class="keywordflow">if</span>(dwRet != <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>) dwRet = <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>;</div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;        }</div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;    }</div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; </div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;    <span class="keywordflow">return</span> nRet;</div>
<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;}</div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; </div>
<div class="line"><a name="l01416"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#a00f2cbea818f1515ea4c4c71d6accbab"> 1416</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_share_api_8cpp.html#a00f2cbea818f1515ea4c4c71d6accbab">__OpeWaitCountValue</a>(std::map&lt;int,PEVENTFD*&gt;&amp; mefds, <span class="keywordtype">bool</span> bAdd)</div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;{</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;    <span class="keywordflow">for</span>(std::map&lt;int, PEVENTFD*&gt;::iterator it = mefds.begin(); it != mefds.end(); ++it)</div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;    {</div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;        <span class="keywordflow">if</span> (bAdd){</div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;            <a class="code" href="namespace_share_api.html#aae939585936b972d0fba0a064278f6dd">ShareApi::InterlockedIncrement</a>(&amp;((*(it-&gt;second))-&gt;waitcount));</div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;        }<span class="keywordflow">else</span>{</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;            <a class="code" href="namespace_share_api.html#a1cf67c0b1b748d5d51ec8dbd0f7aaae4">ShareApi::InterlockedDecrement</a>(&amp;((*(it-&gt;second))-&gt;waitcount));</div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;        }</div>
<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;    }</div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;}</div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; </div>
<div class="line"><a name="l01428"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#a5494485d08eceb579cfc5f77a93e2e93"> 1428</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_share_api_8cpp.html#a5494485d08eceb579cfc5f77a93e2e93">__ResetAllEvent</a>(<a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a> *pfds, <span class="keywordtype">int</span> nEventCount)</div>
<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;{</div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nEventCount; i++)</div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;    {</div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;        <span class="keywordflow">if</span>(pfds[i]-&gt;bAuto){</div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;            <a class="code" href="namespace_share_api.html#aa020decf062bbd8dc399dd69c67a1d5b">ShareApi::InterlockedExchange</a>((<span class="keywordtype">int</span>*)(&amp;(pfds[i]-&gt;bEvent)), <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>);</div>
<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;        }</div>
<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;    }</div>
<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;}</div>
<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; </div>
<div class="line"><a name="l01439"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a13aef8d6aaac3071ccedf693c7d03f27"> 1439</a></span>&#160;<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> <a class="code" href="namespace_share_api.html#a13aef8d6aaac3071ccedf693c7d03f27">ShareApi::WaitForMultipleEvents</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> *hEvents, <span class="keywordtype">int</span> nEventCount, <a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> bWaitAll, <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwWaitOut)</div>
<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;{</div>
<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwRet = <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a>;</div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;    dwRet = ::WaitForMultipleObjects(nEventCount, (<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>*)hEvents, bWaitAll, dwWaitOut);</div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;    <span class="keywordflow">if</span>(nEventCount &gt;= <a class="code" href="tools_8h.html#a67d4bc2b7cce253843984b8e1bb60519">MAXIMUM_WAIT_OBJECTS</a>)</div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;    {</div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;        dwRet = <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>;</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;        <span class="keywordflow">return</span> dwRet;</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;    }</div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwSaveWaitOut = dwWaitOut;</div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    <a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a> *pfd = (<a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a>*)hEvents;</div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;    <span class="keywordflow">if</span>(<a class="code" href="_share_api_8cpp.html#a46806acd910e12ac9b1817fffd16088e">__CheckAllEvent</a>(pfd, nEventCount))</div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;    {</div>
<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;        dwRet = <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a>;</div>
<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;    }</div>
<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;    {</div>
<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;        <span class="keywordtype">int</span> nPos = <a class="code" href="_share_api_8cpp.html#aa429fd44d991e54973173c58666b655d">__CheckEvent</a>(pfd, nEventCount);</div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;        <span class="keywordflow">if</span>(nPos != -1 &amp;&amp; bWaitAll == <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>){</div>
<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;            dwRet = <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a> + nPos;</div>
<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;        }</div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;        {           </div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;            <span class="keywordflow">do</span></div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;            {</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;                fd_set rset, eset;</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;                FD_ZERO(&amp;rset);FD_ZERO(&amp;eset);</div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;                <span class="keywordtype">int</span> recount = 0;</div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;                <span class="comment">// 设置需要等待的文件描述符</span></div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;                std::map&lt;int, PEVENTFD*&gt; mefds;</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;                <span class="keywordtype">int</span> maxfd = <a class="code" href="_share_api_8cpp.html#acea67912e789b238c7cada81b7b07b8e">__SetSelectEvent</a>(pfd, nEventCount, &amp;rset, &amp;eset, mefds);</div>
<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;                <span class="keywordflow">if</span>(maxfd &lt; 1){</div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;                    dwRet = <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a>;</div>
<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;                    <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;                }</div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;                <span class="keywordflow">else</span></div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;                {</div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;                    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwStart = 0, dwEnd = 0, sret;</div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;                    timeval timeout;</div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; </div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;                    <span class="comment">// 等待超时并重新计算下一次超时值...</span></div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;                    timeout.tv_sec = dwWaitOut / 1000;</div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;                    timeout.tv_usec = (dwWaitOut % 1000)*1000;</div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;                    <a class="code" href="_share_api_8cpp.html#a00f2cbea818f1515ea4c4c71d6accbab">__OpeWaitCountValue</a>(mefds, <span class="keyword">true</span>);</div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;                    dwStart = <a class="code" href="namespace_share_api.html#a0a37d9b5c4fe9f8f5611369885097b67">GetTickCount</a>();</div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;                    sret = select(maxfd, &amp;rset, NULL, &amp;eset, &amp;timeout);</div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;                    dwEnd = <a class="code" href="namespace_share_api.html#a0a37d9b5c4fe9f8f5611369885097b67">GetTickCount</a>();</div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;                    <a class="code" href="_share_api_8cpp.html#a00f2cbea818f1515ea4c4c71d6accbab">__OpeWaitCountValue</a>(mefds, <span class="keyword">false</span>);</div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; </div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;                    <span class="comment">// 误差16ms左右</span></div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;                    <span class="keywordflow">if</span>((dwEnd - dwStart &gt; dwWaitOut + <a class="code" href="_share_api_8cpp.html#ac4b56387d2597207e125ebeb29d8179f">CPU_TICK_TIME</a>))</div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;                    {</div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;                        <span class="keywordflow">if</span>(sret &lt; 0){</div>
<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;                            dwRet = <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>;</div>
<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;                        }<span class="keywordflow">else</span> <span class="keywordflow">if</span>(sret == 0){</div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;                            dwRet = <a class="code" href="tools_8h.html#a5578de68603dc6185924f95f1ae4be6e">WAIT_TIMEOUT</a>;</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;                        }</div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;                        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;                        {</div>
<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;                            <span class="comment">// 读取所有写入的数据,防止下次惊醒select</span></div>
<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;                            <a class="code" href="_share_api_8cpp.html#a98b540b0b01c13424dda5763a9c99fb9">__ReadEfdInfo</a>(mefds, &amp;rset, &amp;eset, dwRet, pfd);</div>
<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;                            dwRet = <a class="code" href="tools_8h.html#a5578de68603dc6185924f95f1ae4be6e">WAIT_TIMEOUT</a>;</div>
<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;                        }</div>
<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;                    }</div>
<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;                    <span class="keywordflow">else</span></div>
<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;                    {</div>
<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;                        <span class="keywordflow">if</span>(sret &lt; 0){</div>
<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;                            dwRet = <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>;</div>
<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;                        }<span class="keywordflow">else</span> <span class="keywordflow">if</span>(sret == 0){</div>
<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;                            dwWaitOut -= dwEnd - dwStart;</div>
<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;                        }</div>
<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;                        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;                        {</div>
<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;                            <span class="comment">// 读取所有等待到的数据</span></div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;                            recount = <a class="code" href="_share_api_8cpp.html#a98b540b0b01c13424dda5763a9c99fb9">__ReadEfdInfo</a>(mefds, &amp;rset, &amp;eset, dwRet, pfd);</div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;                            dwWaitOut -= dwEnd - dwStart;</div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;                            <span class="keywordflow">if</span>(recount &gt; 0 &amp;&amp; bWaitAll == <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>){</div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;                                <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;                            }</div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;                        }<span class="comment">// end if read data is success</span></div>
<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; </div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;                        <span class="keywordflow">if</span>(bWaitAll)</div>
<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;                        {</div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;                            <span class="keywordflow">if</span>(<a class="code" href="_share_api_8cpp.html#a46806acd910e12ac9b1817fffd16088e">__CheckAllEvent</a>(pfd, nEventCount))</div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;                            {</div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;                                dwRet = <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a>;</div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;                                <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;                            }</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;                        }</div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;                        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;                        {</div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;                            nPos = <a class="code" href="_share_api_8cpp.html#aa429fd44d991e54973173c58666b655d">__CheckEvent</a>(pfd, nEventCount);</div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;                            <span class="keywordflow">if</span>(nPos != -1)</div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;                            {<span class="comment">// 至少有一个事件处于激活状态</span></div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;                                dwRet = <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a> + nPos;</div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;                                <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;                            }<span class="keywordflow">else</span>{<span class="comment">// 全都处于未激活状态,重计算等待时间继续等待</span></div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;                                dwWaitOut -= dwEnd - dwStart;</div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;                            }</div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;                        }<span class="comment">// end if select is success?</span></div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;                    }<span class="comment">// end if timeout...</span></div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;                }<span class="comment">// end if maxfd &gt; 0</span></div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;                <span class="keywordflow">if</span>(dwRet == <a class="code" href="tools_8h.html#a5578de68603dc6185924f95f1ae4be6e">WAIT_TIMEOUT</a> &amp;&amp; dwSaveWaitOut == <a class="code" href="tools_8h.html#aa84a29002ab81c719c0d07bb446296e0">INFINITE</a>)</div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;                {</div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;                    <span class="comment">// 设置参数INFINITE则没有超时概念</span></div>
<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;                    dwWaitOut = dwSaveWaitOut;</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;                    <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;                }</div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;            }<span class="keywordflow">while</span> (dwRet != <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a> &amp;&amp; dwRet != <a class="code" href="tools_8h.html#a5578de68603dc6185924f95f1ae4be6e">WAIT_TIMEOUT</a>);</div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;        }</div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;    }</div>
<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;    <a class="code" href="_share_api_8cpp.html#a5494485d08eceb579cfc5f77a93e2e93">__ResetAllEvent</a>(pfd, nEventCount);</div>
<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; </div>
<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;    <span class="keywordflow">return</span> dwRet;</div>
<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;}</div>
<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; </div>
<div class="line"><a name="l01558"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a7ee205cb7095e6d00b9631fa1857a6c3"> 1558</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a7ee205cb7095e6d00b9631fa1857a6c3">ShareApi::CloseEvent</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hEvent)</div>
<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;{</div>
<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;    <span class="keywordflow">if</span> (!hEvent) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;    CloseHandle((<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hEvent);</div>
<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;    <a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a> efd = (<a class="code" href="____tools_8h.html#aed7a8fbfa2ff233f4bb75136e358354b">PEVENTFD</a>)hEvent;</div>
<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;    close(efd-&gt;<a class="code" href="struct___e_v_e_n_t_f_d.html#af93a0d73c7421ef80e168c305dd913e5">efd</a>);</div>
<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;    free((<a class="code" href="struct___e_v_e_n_t_f_d.html">PEVENTFD</a>)efd);</div>
<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;}</div>
<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; </div>
<div class="line"><a name="l01570"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a6a96c0bb1d6b9ad1fdb25a055e7ed85c"> 1570</a></span>&#160;<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> <a class="code" href="namespace_share_api.html#a6a96c0bb1d6b9ad1fdb25a055e7ed85c">ShareApi::CreateCondVariable</a>()</div>
<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;{</div>
<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;    <a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html">PCONDVARINFO</a> pCond = (<a class="code" href="____tools_8h.html#a8654b261ddc7d0250704595f9be92898">PCONDVARINFO</a>)malloc(<span class="keyword">sizeof</span>(<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html">CONDVARINFO</a>));</div>
<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;    <span class="keywordflow">if</span> (pCond == NULL) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;    InitializeConditionVariable(&amp;pCond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>);</div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;    </div>
<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;    <span class="comment">// 设置相对时间的属性</span></div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;    <span class="keywordflow">if</span>(pthread_condattr_init(&amp;pCond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#aef6b078a30d1d642faa98e25c0da5c1c">attr</a>))</div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;    {</div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;        free(pCond);</div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;        <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;    }</div>
<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(pthread_condattr_setclock(&amp;pCond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#aef6b078a30d1d642faa98e25c0da5c1c">attr</a>, CLOCK_MONOTONIC))</div>
<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;    {</div>
<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;        pthread_condattr_destroy(&amp;pCond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#aef6b078a30d1d642faa98e25c0da5c1c">attr</a>);</div>
<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;        free(pCond);</div>
<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;        <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;    }</div>
<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;    {</div>
<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;        <span class="comment">// 初始化条件变量</span></div>
<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;        <span class="keywordflow">if</span>(pthread_cond_init(&amp;pCond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>, &amp;pCond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#aef6b078a30d1d642faa98e25c0da5c1c">attr</a>))</div>
<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;        {</div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;            <span class="comment">// 失败</span></div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;            pthread_condattr_destroy(&amp;pCond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#aef6b078a30d1d642faa98e25c0da5c1c">attr</a>);</div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;            free(pCond);</div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;            <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;        }</div>
<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;    }</div>
<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; </div>
<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;    <span class="keywordflow">return</span> (<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a>)pCond;</div>
<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;}</div>
<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; </div>
<div class="line"><a name="l01606"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ab91c15d44323d61c48b1afd434da6a33"> 1606</a></span>&#160;<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> <a class="code" href="namespace_share_api.html#ab91c15d44323d61c48b1afd434da6a33">ShareApi::WaitConditionVariable</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hCond, <a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hMutex, <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwTime)</div>
<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;{</div>
<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;    <span class="keywordflow">if</span>(!hCond || !hMutex) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>;</div>
<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; </div>
<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwCode = 0;</div>
<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;    <a class="code" href="struct___m_u_t_e_x_i_n_f_o.html">PMTINFO</a> mutex = (<a class="code" href="____tools_8h.html#a5426e8dc0277759ec246d58996aa8e65">PMTINFO</a>)hMutex;</div>
<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;    <a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html">PCONDVARINFO</a> cond = (<a class="code" href="____tools_8h.html#a8654b261ddc7d0250704595f9be92898">PCONDVARINFO</a>)hCond;</div>
<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;    dwCode = ::SleepConditionVariableCS(&amp;cond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>, &amp;mutex-&gt;<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html#a065ba05c5c3dc66fee5a4a7f5172618b">mutex</a>, dwTime);</div>
<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;    <span class="keywordflow">if</span> (dwCode == 0)</div>
<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;    {</div>
<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;        <span class="keywordflow">if</span> (::<a class="code" href="namespace_share_api.html#af058258537f5205e21395182fcc04208">GetLastError</a>() == ERROR_TIMEOUT) dwCode = <a class="code" href="tools_8h.html#a5578de68603dc6185924f95f1ae4be6e">WAIT_TIMEOUT</a>;</div>
<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;        <span class="keywordflow">else</span> dwCode = <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>;</div>
<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;    }</div>
<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;    <span class="comment">// 如果有信号则不等待</span></div>
<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;    <span class="keywordtype">int</span> nRet = 0;</div>
<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;    <span class="comment">// 等待事件有信号</span></div>
<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;    <span class="keywordflow">if</span> (dwTime != <a class="code" href="tools_8h.html#aa84a29002ab81c719c0d07bb446296e0">INFINITE</a>)</div>
<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;    {</div>
<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;        <span class="comment">// 设置相对时间而不是根据系统时间来决议</span></div>
<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;        timespec timeInfo;</div>
<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;        clock_gettime(CLOCK_MONOTONIC, &amp;timeInfo);</div>
<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;        timeInfo.tv_sec += dwTime / 1000;</div>
<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;        timeInfo.tv_nsec += (dwTime % 1000) * 1000 * 1000; <span class="comment">// 毫秒转纳秒</span></div>
<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;        nRet = pthread_cond_timedwait(&amp;(cond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>), &amp;(mutex-&gt;<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html#a065ba05c5c3dc66fee5a4a7f5172618b">mutex</a>), &amp;timeInfo);</div>
<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;    }</div>
<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;    {</div>
<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;        <span class="comment">// 没有超时等待,函数会一直等待事件有信号</span></div>
<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;        nRet = pthread_cond_wait(&amp;(cond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>), &amp;(mutex-&gt;<a class="code" href="struct___m_u_t_e_x_i_n_f_o.html#a065ba05c5c3dc66fee5a4a7f5172618b">mutex</a>));</div>
<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;    }</div>
<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; </div>
<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;    <span class="comment">// 判断返回值</span></div>
<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;    <span class="keywordflow">if</span> (nRet == 0) {</div>
<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;        dwCode = <a class="code" href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a>;</div>
<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;    }<span class="keywordflow">else</span> <span class="keywordflow">if</span> (nRet == ETIMEDOUT) {</div>
<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;        dwCode = <a class="code" href="tools_8h.html#a5578de68603dc6185924f95f1ae4be6e">WAIT_TIMEOUT</a>;</div>
<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;    }<span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;        dwCode = <a class="code" href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a>;</div>
<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;    }</div>
<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;    <span class="keywordflow">return</span> dwCode;</div>
<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;}</div>
<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; </div>
<div class="line"><a name="l01651"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ae618bc7d8ba275d84cb5b7b984d41613"> 1651</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#ae618bc7d8ba275d84cb5b7b984d41613">ShareApi::NotifyAllCondVariable</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hCond)</div>
<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;{</div>
<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;    <span class="keywordflow">if</span> (!hCond) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; </div>
<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;    <a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> bRet = <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;    <a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html">PCONDVARINFO</a> cond = (<a class="code" href="____tools_8h.html#a8654b261ddc7d0250704595f9be92898">PCONDVARINFO</a>)hCond;</div>
<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;    WakeAllConditionVariable(&amp;cond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>);</div>
<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;    <span class="keywordflow">if</span> (pthread_cond_broadcast(&amp;cond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>) != 0){</div>
<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;        bRet = <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;    }</div>
<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; </div>
<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;    <span class="keywordflow">return</span> bRet;</div>
<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;}</div>
<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; </div>
<div class="line"><a name="l01668"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a33be1b774a30a60e8f134e9a54e754f0"> 1668</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a33be1b774a30a60e8f134e9a54e754f0">ShareApi::NotifyCondVariable</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hCond)</div>
<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;{</div>
<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;    <span class="keywordflow">if</span> (!hCond) <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; </div>
<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;    <a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> bRet = <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;    <a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html">PCONDVARINFO</a> cond = (<a class="code" href="____tools_8h.html#a8654b261ddc7d0250704595f9be92898">PCONDVARINFO</a>)hCond;</div>
<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;    WakeConditionVariable(&amp;cond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>);</div>
<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;    <span class="keywordflow">if</span> (pthread_cond_signal(&amp;cond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>) != 0){</div>
<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;        bRet = <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;    }</div>
<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;<span class="preprocessor">#endif // WIN32</span></div>
<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;    <span class="keywordflow">return</span> bRet;</div>
<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;}</div>
<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; </div>
<div class="line"><a name="l01684"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a34a96620589e6276f6a506d0180af6d8"> 1684</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a34a96620589e6276f6a506d0180af6d8">ShareApi::CloseConditionVariable</a>(<a class="code" href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a> hCond)</div>
<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;{</div>
<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;    <span class="keywordflow">if</span> (!hCond) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;    free((<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html">PCONDVARINFO</a>)hCond);</div>
<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;    <a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html">PCONDVARINFO</a> cond = (<a class="code" href="____tools_8h.html#a8654b261ddc7d0250704595f9be92898">PCONDVARINFO</a>)hCond;</div>
<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;    <span class="keywordflow">if</span> (cond)</div>
<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;    {</div>
<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;        pthread_cond_destroy(&amp;cond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">cond</a>);</div>
<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;        pthread_condattr_destroy(&amp;cond-&gt;<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#aef6b078a30d1d642faa98e25c0da5c1c">attr</a>);</div>
<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;        free((<a class="code" href="struct___c_o_n_d_v_a_r_i_n_f_o__.html">PCONDVARINFO</a>)cond);</div>
<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;    }</div>
<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;<span class="preprocessor">#endif // WIN32</span></div>
<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;}</div>
<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; </div>
<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;<span class="preprocessor">#ifdef LINUX</span></div>
<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;<span class="comment">// 检查所有事件是否都有信号</span></div>
<div class="line"><a name="l01702"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#a22b1d11e3eb14e0c2ef221ebec5d5cd0"> 1702</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_share_api_8cpp.html#a22b1d11e3eb14e0c2ef221ebec5d5cd0">CheckAllEventHaveSignal</a>(<a class="code" href="struct___s_i_g_n_a_l_i_n_f_o.html">PSGINFO</a> pSginfos, <span class="keywordtype">int</span> nSignalCount)</div>
<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;{</div>
<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;    <span class="keywordflow">while</span>(--nSignalCount &gt;= 0)</div>
<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;    {</div>
<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;        <span class="keywordflow">if</span>(!pSginfos[nSignalCount].IsEvent())</div>
<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;        {</div>
<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;        }</div>
<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;    }</div>
<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;}</div>
<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;<span class="comment">// 检查是否有事件信号的存在</span></div>
<div class="line"><a name="l01714"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#ada08546d17d96eb6dde8802416ae390d"> 1714</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="_share_api_8cpp.html#ada08546d17d96eb6dde8802416ae390d">CheckEventHaveSignal</a>(<a class="code" href="struct___s_i_g_n_a_l_i_n_f_o.html">PSGINFO</a> pSginfos, <span class="keywordtype">int</span> nSignalCount)</div>
<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;{</div>
<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;    <span class="keywordflow">while</span>(--nSignalCount &gt;= 0)</div>
<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;    {</div>
<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;        <span class="keywordflow">if</span>(pSginfos[nSignalCount].IsEvent())</div>
<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;        {</div>
<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;            <span class="keywordflow">return</span> nSignalCount;</div>
<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;        }</div>
<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;    }</div>
<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;    <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;}</div>
<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; </div>
<div class="line"><a name="l01727"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a83771e6812aba75449e79e18b9220041"> 1727</a></span>&#160;<span class="keywordtype">long</span> <a class="code" href="namespace_share_api.html#a83771e6812aba75449e79e18b9220041">ShareApi::InterlockedExchangeAdd</a>(<span class="keywordtype">long</span> *Addend, <span class="keywordtype">long</span> value)</div>
<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;{</div>
<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;    return ::_InterlockedExchangeAdd((<a class="code" href="tools_8h.html#a9154c0d0c21af4686624543215b4e5f2">LONG</a>*)Addend, value);</div>
<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;    <span class="keywordflow">return</span> __sync_fetch_and_add(Addend, value);</div>
<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;}</div>
<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; </div>
<div class="line"><a name="l01736"></a><span class="lineno"><a class="line" href="namespace_share_api.html#afa333977e77d5aa53d011ffd2531f8fc"> 1736</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="namespace_share_api.html#a83771e6812aba75449e79e18b9220041">ShareApi::InterlockedExchangeAdd</a>(<span class="keywordtype">int</span> *Addend, <span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;{</div>
<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;    <span class="keywordflow">return</span> (<span class="keywordtype">int</span>)::_InterlockedExchangeAdd((<a class="code" href="tools_8h.html#a9154c0d0c21af4686624543215b4e5f2">LONG</a>*)Addend, value);</div>
<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;    <span class="keywordflow">return</span> __sync_fetch_and_add(Addend, value);</div>
<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;}</div>
<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; </div>
<div class="line"><a name="l01745"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a510d88717f432bba3b53a87989044492"> 1745</a></span>&#160;<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> <a class="code" href="namespace_share_api.html#a510d88717f432bba3b53a87989044492">ShareApi::InterlockedExchangeAdd64</a>(<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> *Addend, <a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> value)</div>
<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;{</div>
<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;    <a class="code" href="namespace_share_api.html#a510d88717f432bba3b53a87989044492">return ::InterlockedExchangeAdd64</a>(Addend, value);</div>
<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;    <span class="keywordflow">return</span> __sync_fetch_and_add(Addend, value);</div>
<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;}</div>
<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; </div>
<div class="line"><a name="l01754"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aa020decf062bbd8dc399dd69c67a1d5b"> 1754</a></span>&#160;<span class="keywordtype">long</span> <a class="code" href="namespace_share_api.html#aa020decf062bbd8dc399dd69c67a1d5b">ShareApi::InterlockedExchange</a>(<span class="keywordtype">long</span> *Addend, <span class="keywordtype">long</span> value)</div>
<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;{</div>
<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;    return ::_InterlockedExchange(Addend, value);</div>
<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;    <span class="keywordflow">return</span> __sync_lock_test_and_set(Addend, value);</div>
<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;}</div>
<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; </div>
<div class="line"><a name="l01763"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a74971aa7355ca77722a8e6ca66ae3841"> 1763</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="namespace_share_api.html#aa020decf062bbd8dc399dd69c67a1d5b">ShareApi::InterlockedExchange</a>(<span class="keywordtype">int</span> *Addend, <span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;{</div>
<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;    <span class="keywordflow">return</span> (<span class="keywordtype">int</span>)::_InterlockedExchange((<span class="keywordtype">long</span>*)Addend, value);</div>
<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;    <span class="keywordflow">return</span> __sync_lock_test_and_set(Addend, value);</div>
<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;}</div>
<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; </div>
<div class="line"><a name="l01772"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a949e52140a840041bc8d2353327f576a"> 1772</a></span>&#160;<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> <a class="code" href="namespace_share_api.html#a949e52140a840041bc8d2353327f576a">ShareApi::InterlockedExchange64</a>(<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a>* Addend, <a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> value)</div>
<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;{</div>
<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;    <a class="code" href="namespace_share_api.html#a949e52140a840041bc8d2353327f576a">return ::InterlockedExchange64</a>(Addend, value);</div>
<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;    <span class="keywordflow">return</span> __sync_lock_test_and_set(Addend, value);</div>
<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;}</div>
<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; </div>
<div class="line"><a name="l01781"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a3d320458a805a39a1abc145d7aa28fb6"> 1781</a></span>&#160;<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> <a class="code" href="namespace_share_api.html#a3d320458a805a39a1abc145d7aa28fb6">ShareApi::InterlockedIncrement64</a>(<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> *Addend)</div>
<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;{</div>
<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespace_share_api.html#a510d88717f432bba3b53a87989044492">ShareApi::InterlockedExchangeAdd64</a>(Addend, 1);</div>
<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;}</div>
<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; </div>
<div class="line"><a name="l01786"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aae939585936b972d0fba0a064278f6dd"> 1786</a></span>&#160;<span class="keywordtype">long</span> <a class="code" href="namespace_share_api.html#aae939585936b972d0fba0a064278f6dd">ShareApi::InterlockedIncrement</a>(<span class="keywordtype">long</span> *Addend)</div>
<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;{</div>
<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespace_share_api.html#a83771e6812aba75449e79e18b9220041">ShareApi::InterlockedExchangeAdd</a>(Addend, 1);</div>
<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;}</div>
<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; </div>
<div class="line"><a name="l01791"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a3481ddc224ec35e1779ad5462cf8f29a"> 1791</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="namespace_share_api.html#aae939585936b972d0fba0a064278f6dd">ShareApi::InterlockedIncrement</a>(<span class="keywordtype">int</span> *Addend)</div>
<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;{</div>
<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespace_share_api.html#a83771e6812aba75449e79e18b9220041">ShareApi::InterlockedExchangeAdd</a>(Addend, 1);</div>
<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;}</div>
<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; </div>
<div class="line"><a name="l01796"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a647b7c405fa0d8d21c4d1da509fc58ec"> 1796</a></span>&#160;<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> <a class="code" href="namespace_share_api.html#a647b7c405fa0d8d21c4d1da509fc58ec">ShareApi::InterlockedDecrement64</a>(<a class="code" href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a> *Addend)</div>
<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;{</div>
<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespace_share_api.html#a510d88717f432bba3b53a87989044492">ShareApi::InterlockedExchangeAdd64</a>(Addend, -1);</div>
<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;}</div>
<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; </div>
<div class="line"><a name="l01801"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a1cf67c0b1b748d5d51ec8dbd0f7aaae4"> 1801</a></span>&#160;<span class="keywordtype">long</span> <a class="code" href="namespace_share_api.html#a1cf67c0b1b748d5d51ec8dbd0f7aaae4">ShareApi::InterlockedDecrement</a>(<span class="keywordtype">long</span> *Addend)</div>
<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;{</div>
<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespace_share_api.html#a83771e6812aba75449e79e18b9220041">ShareApi::InterlockedExchangeAdd</a>(Addend, -1);</div>
<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;}</div>
<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; </div>
<div class="line"><a name="l01806"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a4535893b4a84f7446af7f907e843f504"> 1806</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="namespace_share_api.html#a1cf67c0b1b748d5d51ec8dbd0f7aaae4">ShareApi::InterlockedDecrement</a>(<span class="keywordtype">int</span> *Addend)</div>
<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;{</div>
<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespace_share_api.html#a83771e6812aba75449e79e18b9220041">ShareApi::InterlockedExchangeAdd</a>(Addend, -1);</div>
<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;}</div>
<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; </div>
<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;<span class="comment">/********************** 同步相关(end) *************************/</span></div>
<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; </div>
<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; </div>
<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;<span class="comment">/************************ 时间相关(start) ***********************/</span></div>
<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; </div>
<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;<span class="comment">// 线程休眠指定的时间</span></div>
<div class="line"><a name="l01817"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a169d4ee242a5f842c91da9be8a179e18"> 1817</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a169d4ee242a5f842c91da9be8a179e18">ShareApi::Sleep</a>(<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> dwSleep)</div>
<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;{</div>
<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;    <a class="code" href="namespace_share_api.html#a169d4ee242a5f842c91da9be8a179e18">::Sleep</a>(dwSleep);</div>
<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;    useconds_t udSleep = (useconds_t)dwSleep * 1000;</div>
<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;    usleep(udSleep);</div>
<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;}</div>
<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; </div>
<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;<span class="comment">// 获取从系统启动锁经过的时间(单位毫秒)</span></div>
<div class="line"><a name="l01828"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a608cadd04e1c250b35997658e0390cc7"> 1828</a></span>&#160;<a class="code" href="tools_8h.html#adbfeae90dcbc6d1e23fc52bb64339f46">DWORD64</a> <a class="code" href="namespace_share_api.html#a608cadd04e1c250b35997658e0390cc7">ShareApi::GetTickCount64</a>()</div>
<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;{</div>
<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;    <a class="code" href="namespace_share_api.html#a608cadd04e1c250b35997658e0390cc7">return ::GetTickCount64</a>();</div>
<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;    <span class="keyword">struct </span>timespec tMonTime = {0, 0};</div>
<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;    clock_gettime(CLOCK_MONOTONIC, &amp;tMonTime);</div>
<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;    <span class="keywordflow">return</span> (tMonTime.tv_sec * 1000 + tMonTime.tv_nsec / 1000000);</div>
<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;}</div>
<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; </div>
<div class="line"><a name="l01839"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a0a37d9b5c4fe9f8f5611369885097b67"> 1839</a></span>&#160;<a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> <a class="code" href="namespace_share_api.html#a0a37d9b5c4fe9f8f5611369885097b67">ShareApi::GetTickCount</a>()</div>
<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;{</div>
<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;    <a class="code" href="namespace_share_api.html#a0a37d9b5c4fe9f8f5611369885097b67">return ::GetTickCount</a>();</div>
<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;    <span class="keyword">struct </span>timespec tMonTime = { 0, 0 };</div>
<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;    clock_gettime(CLOCK_MONOTONIC, &amp;tMonTime);</div>
<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;    <span class="keywordflow">return</span> (tMonTime.tv_sec * 1000 + tMonTime.tv_nsec / 1000000);</div>
<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;}</div>
<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; </div>
<div class="line"><a name="l01850"></a><span class="lineno"><a class="line" href="namespace_share_api.html#aa3a32d171616bf6ce986acb93ce88d30"> 1850</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#aa3a32d171616bf6ce986acb93ce88d30">ShareApi::QueryPerformanceFrequency</a>(<a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html">LARGE_INTEGER</a> *lpFrequency)</div>
<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;{</div>
<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;    <a class="code" href="namespace_share_api.html#aa3a32d171616bf6ce986acb93ce88d30">return ::QueryPerformanceFrequency</a>(lpFrequency);</div>
<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;    lpFrequency-&gt;<a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html#a34beb9c05c3a2982d57fc450cc934ae3">QuadPart</a> = 1;</div>
<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;}</div>
<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; </div>
<div class="line"><a name="l01860"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a52ea835c01d56aaf225ab37baacf7dd6"> 1860</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#a52ea835c01d56aaf225ab37baacf7dd6">ShareApi::QueryPerformanceCounter</a>(<a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html">LARGE_INTEGER</a> *lpPerformanceCount)</div>
<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;{</div>
<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;    <a class="code" href="namespace_share_api.html#a52ea835c01d56aaf225ab37baacf7dd6">return ::QueryPerformanceCounter</a>(lpPerformanceCount);</div>
<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;    <span class="keyword">struct </span>timespec tMonTime = {0, 0};</div>
<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;    <span class="keywordflow">if</span>(clock_gettime(CLOCK_MONOTONIC, &amp;tMonTime) == 0)</div>
<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;    {</div>
<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;        lpPerformanceCount-&gt;<a class="code" href="union___l_a_r_g_e___i_n_t_e_g_e_r.html#a34beb9c05c3a2982d57fc450cc934ae3">QuadPart</a> = tMonTime.tv_sec*1000000000 + tMonTime.tv_nsec;</div>
<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;    }</div>
<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;}</div>
<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;<span class="comment">/************************ 时间相关(end)   ***********************/</span></div>
<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; </div>
<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; </div>
<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> g_bPrintConsole = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;<span class="keywordtype">void</span> <a class="code" href="_share_api_8cpp.html#ac865becd9fe05133047f74738b75841f">printStack</a>(CONTEXT* ctx) <span class="comment">//Prints stack trace based on context record</span></div>
<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;{</div>
<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;    <a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a>    result;</div>
<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;    <a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>  process;</div>
<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;    <a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>  thread;</div>
<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;    HMODULE hModule;</div>
<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; </div>
<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;    STACKFRAME64        stack;</div>
<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;    <a class="code" href="tools_8h.html#af632da489ebc3708ec3ab6791ee53fa4">ULONG</a>               frame;</div>
<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;    <a class="code" href="tools_8h.html#adbfeae90dcbc6d1e23fc52bb64339f46">DWORD64</a>             displacement;</div>
<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; </div>
<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;    <a class="code" href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a> disp;</div>
<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;    IMAGEHLP_LINE64 *line;</div>
<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> MaxNameLen = 256;</div>
<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; </div>
<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;    <span class="keywordtype">char</span> buffer[<span class="keyword">sizeof</span>(SYMBOL_INFO) + MAX_SYM_NAME * <span class="keyword">sizeof</span>(<a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>)];</div>
<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;    <span class="keywordtype">char</span> module[MaxNameLen];</div>
<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;    PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;</div>
<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; </div>
<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;    memset(&amp;stack, 0, <span class="keyword">sizeof</span>(STACKFRAME64));</div>
<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; </div>
<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;    process = GetCurrentProcess();</div>
<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;    thread = GetCurrentThread();</div>
<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;    displacement = 0;</div>
<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;<span class="preprocessor">#if !defined(_M_AMD64)</span></div>
<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;    stack.AddrPC.Offset = (*ctx).Eip;</div>
<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;    stack.AddrPC.Mode = AddrModeFlat;</div>
<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;    stack.AddrStack.Offset = (*ctx).Esp;</div>
<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;    stack.AddrStack.Mode = AddrModeFlat;</div>
<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;    stack.AddrFrame.Offset = (*ctx).Ebp;</div>
<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;    stack.AddrFrame.Mode = AddrModeFlat;</div>
<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; </div>
<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;    SymInitialize(process, NULL, <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>); <span class="comment">//load symbols</span></div>
<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; </div>
<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;    <span class="keywordflow">for</span> (frame = 0; ; frame++)</div>
<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;    {</div>
<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;        <span class="comment">//get next call from stack</span></div>
<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;        result = StackWalk64</div>
<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;        (</div>
<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;#<span class="keywordflow">if</span> defined(_M_AMD64)</div>
<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;            IMAGE_FILE_MACHINE_AMD64</div>
<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;#<span class="keywordflow">else</span></div>
<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;            IMAGE_FILE_MACHINE_I386</div>
<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;#endif</div>
<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;            ,</div>
<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;            process,</div>
<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;            thread,</div>
<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;            &amp;stack,</div>
<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;            ctx,</div>
<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;            NULL,</div>
<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;            SymFunctionTableAccess64,</div>
<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;            SymGetModuleBase64,</div>
<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;            NULL</div>
<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;        );</div>
<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; </div>
<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;        <span class="keywordflow">if</span> (!result) <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; </div>
<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;        <span class="comment">//get symbol name for address</span></div>
<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;        pSymbol-&gt;SizeOfStruct = <span class="keyword">sizeof</span>(SYMBOL_INFO);</div>
<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;        pSymbol-&gt;MaxNameLen = MAX_SYM_NAME;</div>
<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;        SymFromAddr(process, (ULONG64)stack.AddrPC.Offset, &amp;displacement, pSymbol);</div>
<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; </div>
<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;        line = (IMAGEHLP_LINE64 *)malloc(<span class="keyword">sizeof</span>(IMAGEHLP_LINE64));</div>
<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;        line-&gt;SizeOfStruct = <span class="keyword">sizeof</span>(IMAGEHLP_LINE64);</div>
<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; </div>
<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;        <span class="comment">//try to get line</span></div>
<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;        <span class="keywordflow">if</span> (SymGetLineFromAddr64(process, stack.AddrPC.Offset, &amp;disp, line))</div>
<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;        {</div>
<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;            printf(<span class="stringliteral">&quot;\tat %s in %s: line: %lu: address: 0x%llx\n&quot;</span>, pSymbol-&gt;Name, line-&gt;FileName, line-&gt;LineNumber, pSymbol-&gt;Address);</div>
<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;        }</div>
<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;        {</div>
<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;            <span class="comment">//failed to get line</span></div>
<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;            printf(<span class="stringliteral">&quot;\tat %s, address 0x%llx.\n&quot;</span>, pSymbol-&gt;Name, pSymbol-&gt;Address);</div>
<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;            hModule = NULL;</div>
<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;            lstrcpyA(module, <span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;            GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,</div>
<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;                (LPCTSTR)(stack.AddrPC.Offset), &amp;hModule);</div>
<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; </div>
<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;            <span class="comment">//at least print module name</span></div>
<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;            <span class="keywordflow">if</span> (hModule != NULL)GetModuleFileNameA(hModule, module, MaxNameLen);</div>
<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; </div>
<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;            printf(<span class="stringliteral">&quot;in %s\n&quot;</span>, module);</div>
<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;        }</div>
<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; </div>
<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;        free(line);</div>
<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;        line = NULL;</div>
<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;    }</div>
<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;}</div>
<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; </div>
<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;<a class="code" href="tools_8h.html#a9154c0d0c21af4686624543215b4e5f2">LONG</a> WINAPI TOOLS_TOP_LEVEL_EXCEPTION_FILTER(</div>
<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;    <a class="code" href="tools_8h.html#aa74f89aa7d942f4a79ea12d7c9b763ef">_In_</a> <span class="keyword">struct</span> _EXCEPTION_POINTERS *ExceptionInfo</div>
<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;)</div>
<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;{</div>
<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;    <span class="keywordflow">if</span> (g_bPrintConsole == <span class="keyword">true</span>) {</div>
<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;        <a class="code" href="_share_api_8cpp.html#ac865becd9fe05133047f74738b75841f">printStack</a>(ExceptionInfo-&gt;ContextRecord);</div>
<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;    }</div>
<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; </div>
<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;    <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> modulePath[<a class="code" href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a>];</div>
<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;    HMODULE module = GetModuleHandle(NULL);</div>
<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;    <span class="keywordflow">if</span> (module)</div>
<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;    {</div>
<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;        GetModuleFileName(module, modulePath, <span class="keyword">sizeof</span>(modulePath));</div>
<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;        <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* ptr = _tcsrchr(modulePath, <span class="charliteral">&#39;\\&#39;</span>);</div>
<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;        <span class="keywordflow">if</span> (ptr) *ptr = <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;    }</div>
<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; </div>
<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;    <a class="code" href="_string_tools_8h.html#a816fa58fd77499b0edb2c69ebe803d5c">tstring</a> fileName;</div>
<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;    fileName = <a class="code" href="_string_tools_8cpp.html#accff640a08f04f7443e0da4eb25a4cf0">format_s</a>(1024, <a class="code" href="tools_8h.html#a5fc7b9645f751ccc053f6f59ab0d8924">TEXT</a>(<span class="stringliteral">&quot;%s\\%s.dmp&quot;</span>), modulePath, <a class="code" href="_string_tools_8h.html#a0a60694576e1be5888918efa92f551d2">TO_TSTRING</a>((<a class="code" href="class_c_time_tools.html#ade52c34673cca32faab3ac984e1b40c5">CTimeTools::GetDateStr</a>())).c_str());</div>
<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; </div>
<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;    <a class="code" href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a> hFile = <a class="code" href="namespace_share_api.html#a8d8eb33de0a336b6c099d4196e75fbc6">ShareApi::OpenFile</a>(fileName.c_str(), <a class="code" href="tools_8h.html#ae48026a3828fdacfa90766cf5f2448cf">FILE_TRUC</a> | <a class="code" href="tools_8h.html#a449fb273a677a26fb84d3328dfb0da09">FILE_CREATEPLUS</a> | <a class="code" href="tools_8h.html#aaa2bb929a5d07a095aaffb7f91ae2c73">FILE_READWRITE</a>);</div>
<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;    <span class="keywordflow">if</span> (hFile)</div>
<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;    {</div>
<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;        MINIDUMP_EXCEPTION_INFORMATION  M;</div>
<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;        M.ThreadId = <a class="code" href="namespace_share_api.html#aa247d107f7e439e2c6871dfba195a022">GetCurrentThreadId</a>();</div>
<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;        M.ExceptionPointers = ExceptionInfo;</div>
<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;        M.ClientPointers = <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; </div>
<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;        <span class="comment">// 写入dump文件</span></div>
<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;        MiniDumpWriteDump(GetCurrentProcess(), <a class="code" href="namespace_share_api.html#a5f2e8e67d4a3a8d061bd8f109762a48d">GetCurrentProcessId</a>(), (<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a>)hFile, MiniDumpNormal, &amp;M, NULL, NULL);</div>
<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; </div>
<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;        <a class="code" href="namespace_share_api.html#a29fcdef9c215ce0009e28dd52ba2c853">ShareApi::CloseFile</a>(hFile);</div>
<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;    }</div>
<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; </div>
<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;    <span class="keywordflow">return</span> EXCEPTION_CONTINUE_SEARCH;</div>
<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;}</div>
<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; </div>
<div class="line"><a name="l02014"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#ac865becd9fe05133047f74738b75841f"> 2014</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_share_api_8cpp.html#ac865becd9fe05133047f74738b75841f">printStack</a>()</div>
<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;{</div>
<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> BT_BUFF_SIZE = 100;</div>
<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;    <span class="keywordtype">void</span>* buffer[BT_BUFF_SIZE];</div>
<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;    <span class="keywordtype">char</span>** strings;</div>
<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; </div>
<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;    <span class="keywordtype">int</span> btSize = backtrace(buffer, BT_BUFF_SIZE);</div>
<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;    strings = backtrace_symbols(buffer, btSize);</div>
<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; </div>
<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; btSize; i++){</div>
<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;        printf(<span class="stringliteral">&quot;[%d] %s\n&quot;</span>, i, strings[i]);</div>
<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;    }</div>
<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; </div>
<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;    free(strings);</div>
<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;}</div>
<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; </div>
<div class="line"><a name="l02030"></a><span class="lineno"><a class="line" href="_share_api_8cpp.html#a244a92bd6149956ae79daba453c0e5db"> 2030</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_share_api_8cpp.html#a244a92bd6149956ae79daba453c0e5db">deal_signal</a>(<span class="keywordtype">int</span> s, siginfo_t *si, <span class="keywordtype">void</span> *unused)</div>
<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;{</div>
<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;    <span class="keyword">struct </span>sigaction act;</div>
<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;    memset(&amp;act, 0, <span class="keyword">sizeof</span>(act));</div>
<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;    act.sa_flags = SA_SIGINFO;</div>
<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;    act.sa_handler = SIG_DFL;</div>
<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;    sigemptyset(&amp;act.sa_mask);</div>
<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;    sigaction(s, &amp;act, <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>);</div>
<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;    <span class="keywordflow">switch</span> (s)</div>
<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;    {</div>
<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;    <span class="keywordflow">case</span> SIGABRT:</div>
<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;        printf(<span class="stringliteral">&quot;signal SIGABRT\n&quot;</span>);</div>
<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;        <a class="code" href="_share_api_8cpp.html#ac865becd9fe05133047f74738b75841f">printStack</a>();</div>
<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;        abort();</div>
<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;    <span class="keywordflow">case</span> SIGSEGV:</div>
<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;        printf(<span class="stringliteral">&quot;signal SIGSEGV\n&quot;</span>);</div>
<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;        <a class="code" href="_share_api_8cpp.html#ac865becd9fe05133047f74738b75841f">printStack</a>();</div>
<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;        exit(0);</div>
<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;    }</div>
<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;}</div>
<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; </div>
<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;<span class="preprocessor">#endif // WIN32</span></div>
<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; </div>
<div class="line"><a name="l02055"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a6fd951b223aa9382df1d9820bb04072e"> 2055</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#a6fd951b223aa9382df1d9820bb04072e">ShareApi::PrintDumpInfo</a>(<span class="keywordtype">bool</span> bPrintConsole <span class="comment">/* = false */</span>)</div>
<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;{</div>
<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;    g_bPrintConsole = bPrintConsole;</div>
<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;    SetUnhandledExceptionFilter(TOOLS_TOP_LEVEL_EXCEPTION_FILTER);</div>
<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;    <span class="keywordflow">if</span> (bPrintConsole)</div>
<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;    {</div>
<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;        <span class="keyword">struct </span>sigaction act;</div>
<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;        act.sa_flags = SA_SIGINFO;</div>
<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;        act.sa_sigaction = <a class="code" href="_share_api_8cpp.html#a244a92bd6149956ae79daba453c0e5db">deal_signal</a>;</div>
<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;        sigemptyset(&amp;act.sa_mask);</div>
<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;        sigaction(SIGABRT, &amp;act, NULL);</div>
<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;        sigaction(SIGSEGV, &amp;act, NULL);</div>
<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;    }</div>
<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;<span class="preprocessor">#endif // WIN32</span></div>
<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;}</div>
<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; </div>
<div class="line"><a name="l02073"></a><span class="lineno"><a class="line" href="namespace_share_api.html#afc7a41f951383d91baa664bae54c03a3"> 2073</a></span>&#160;<a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> <a class="code" href="namespace_share_api.html#afc7a41f951383d91baa664bae54c03a3">ShareApi::StartProcess</a>(<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* exename, <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>** argv <span class="comment">/* = NullPtr */</span>, <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>** evp <span class="comment">/* = NullPtr */</span>)</div>
<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;{</div>
<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;    <a class="code" href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a> ret = <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;    <a class="code" href="_string_tools_8h.html#a816fa58fd77499b0edb2c69ebe803d5c">tstring</a> commandLine, evpLine;</div>
<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;    <span class="keywordflow">if</span> (argv != <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>)</div>
<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;    {</div>
<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;        <span class="keywordflow">while</span> (*argv != <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>)</div>
<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;        {</div>
<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;            commandLine += <a class="code" href="tools_8h.html#a5fc7b9645f751ccc053f6f59ab0d8924">TEXT</a>(<span class="stringliteral">&quot;\&quot;&quot;</span>);</div>
<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;            commandLine += *argv;</div>
<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;            commandLine += <a class="code" href="tools_8h.html#a5fc7b9645f751ccc053f6f59ab0d8924">TEXT</a>(<span class="stringliteral">&quot;\&quot; &quot;</span>);</div>
<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;            ++argv;</div>
<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;        }</div>
<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;    }</div>
<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;    <span class="keywordflow">else</span>{</div>
<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;        commandLine = GetCommandLine();</div>
<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;    }</div>
<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;    <span class="keywordtype">char</span> *evpParam = <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>;</div>
<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;    <span class="keywordflow">if</span> (evp != <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>)</div>
<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;    {</div>
<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;        <span class="keywordflow">while</span> (*evp != <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>)</div>
<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;        {</div>
<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;            evpLine += *evp;</div>
<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;            evpLine += <a class="code" href="tools_8h.html#a5fc7b9645f751ccc053f6f59ab0d8924">TEXT</a>(<span class="charliteral">&#39;\0&#39;</span>);</div>
<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;            ++evp;</div>
<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;        }</div>
<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;        evpParam = (<span class="keywordtype">char</span>*)evpLine.data();</div>
<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;    }</div>
<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;    <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> filePath[<a class="code" href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a>] = { 0 };</div>
<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;    <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a> *fileName = <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>;</div>
<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;    GetFullPathName(exename, <a class="code" href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a>, filePath, &amp;fileName);</div>
<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;    <span class="keywordflow">if</span> (fileName) *fileName = <a class="code" href="tools_8h.html#a5fc7b9645f751ccc053f6f59ab0d8924">TEXT</a>(<span class="charliteral">&#39;\0&#39;</span>);</div>
<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;    STARTUPINFO si = { <span class="keyword">sizeof</span>(si) };</div>
<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;    PROCESS_INFORMATION pi;</div>
<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;    si.dwFlags = STARTF_USESHOWWINDOW;</div>
<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;    si.wShowWindow = <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;    ret = ::CreateProcess(exename, (LPTSTR)commandLine.data(), <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>, <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>, <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>, CREATE_NEW_CONSOLE, evpParam, filePath, &amp;si, &amp;pi);</div>
<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;    <span class="keywordflow">if</span>(ret == <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>)</div>
<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;    {</div>
<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;        CloseHandle( pi.hProcess );</div>
<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;        CloseHandle( pi.hThread );</div>
<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;    }</div>
<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;    pid_t pid = fork();</div>
<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;    <span class="keywordflow">if</span> (pid == 0)</div>
<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;    {</div>
<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;        <span class="keywordtype">int</span> error = 0;</div>
<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;        <span class="comment">// 子进程</span></div>
<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;        <span class="keywordflow">if</span> (execve(exename, argv, evp) == -1){</div>
<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;            error = errno;</div>
<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;        }</div>
<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;        exit(error);</div>
<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;    }</div>
<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(pid != -1)</div>
<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;    {</div>
<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;        <span class="comment">// 父进程</span></div>
<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;        <span class="keywordtype">int</span> status = 0;</div>
<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;        waitpid(pid, &amp;status, WUNTRACED | WCONTINUED);</div>
<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;        status = WEXITSTATUS(status);</div>
<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;        <span class="keywordflow">if</span>(status != 0)</div>
<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;        {</div>
<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;            errno = status;</div>
<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;            ret = <a class="code" href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a>;</div>
<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;        }<span class="keywordflow">else</span>{</div>
<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;            ret = <a class="code" href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;</div>
<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;        }</div>
<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;    }</div>
<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; </div>
<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;    <span class="keywordflow">return</span> ret;</div>
<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;}</div>
<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; </div>
<div class="line"><a name="l02146"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a4b416e5e159ac50d2c18a1f77a0ea734"> 2146</a></span>&#160;<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a> <a class="code" href="namespace_share_api.html#a4b416e5e159ac50d2c18a1f77a0ea734">ShareApi::LoadDll</a>(<span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* dllName)</div>
<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;{</div>
<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;    <a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a> h = <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>;</div>
<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;<span class="preprocessor">#if WIN32</span></div>
<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;    h = ::LoadLibrary(dllName);</div>
<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;    h = ::dlopen(dllName, RTLD_LAZY);</div>
<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;    <span class="keywordflow">if</span> (h == <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>)</div>
<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;    {</div>
<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;        fprintf(stderr, <span class="stringliteral">&quot;%s\n&quot;</span>, dlerror());</div>
<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;        errno = ENOENT;</div>
<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;    }</div>
<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;    <span class="keywordflow">return</span> h;</div>
<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;}</div>
<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; </div>
<div class="line"><a name="l02162"></a><span class="lineno"><a class="line" href="namespace_share_api.html#a65d31568eb4e185474be493a8a9ec749"> 2162</a></span>&#160;<span class="keywordtype">void</span>* <a class="code" href="namespace_share_api.html#a65d31568eb4e185474be493a8a9ec749">ShareApi::LoadSymbol</a>(<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a> dlHandle, <span class="keyword">const</span> <a class="code" href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a>* symbol)</div>
<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;{</div>
<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;    <span class="keywordtype">void</span>* symb = <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>;</div>
<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;    symb = (<span class="keywordtype">void</span>*)::GetProcAddress((HMODULE)dlHandle, <a class="code" href="_string_tools_8h.html#a3f424acff193363c7e54626a35b90e69">TO_STRING</a>(symbol).c_str());</div>
<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;    symb = dlsym(dlHandle, symbol);</div>
<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;    <span class="keywordflow">if</span> (symb == <a class="code" href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a>)</div>
<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;    {</div>
<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;        fprintf(stderr, <span class="stringliteral">&quot;%s\n&quot;</span>, dlerror());</div>
<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;        errno = ENOENT;</div>
<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;    }</div>
<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;    <span class="keywordflow">return</span> symb;</div>
<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;}</div>
<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; </div>
<div class="line"><a name="l02178"></a><span class="lineno"><a class="line" href="namespace_share_api.html#ac677a9c487af4ea8e2a3c14c4a5593e6"> 2178</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespace_share_api.html#ac677a9c487af4ea8e2a3c14c4a5593e6">ShareApi::CloseDll</a>(<a class="code" href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a> dlHandle)</div>
<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;{</div>
<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;    <span class="keywordflow">if</span> (!dlHandle) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div>
<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;    FreeLibrary((HMODULE)dlHandle);</div>
<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;<span class="preprocessor">#elif defined(LINUX)</span></div>
<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;    dlclose(dlHandle);</div>
<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;}</div>
<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; </div>
<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;<a class="code" href="tools_8h.html#ac909db71799bb22cb7d636a34cd785e4">DEF_END_LIBTOOLS</a></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astruct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a_html_abbd9ad559e3b54fed535ae26a7ae016b"><div class="ttname"><a href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#abbd9ad559e3b54fed535ae26a7ae016b">__INLINE_THREAD_DATA::arg</a></div><div class="ttdeci">void * arg</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01095">ShareApi.cpp:1095</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ab91c15d44323d61c48b1afd434da6a33"><div class="ttname"><a href="namespace_share_api.html#ab91c15d44323d61c48b1afd434da6a33">ShareApi::WaitConditionVariable</a></div><div class="ttdeci">LIBTOOLS DWORD WaitConditionVariable(SYNCHANDLE hCond, SYNCHANDLE hMutex, DWORD dwWaitOut)</div><div class="ttdoc">等待条件变量</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01606">ShareApi.cpp:1606</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aa3a32d171616bf6ce986acb93ce88d30"><div class="ttname"><a href="namespace_share_api.html#aa3a32d171616bf6ce986acb93ce88d30">ShareApi::QueryPerformanceFrequency</a></div><div class="ttdeci">LIBTOOLS BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)</div><div class="ttdoc">获取cup时间频率函数(linux下该函数无效)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01850">ShareApi.cpp:1850</a></div></div>
<div class="ttc" id="a_string_tools_8h_html_a816fa58fd77499b0edb2c69ebe803d5c"><div class="ttname"><a href="_string_tools_8h.html#a816fa58fd77499b0edb2c69ebe803d5c">tstring</a></div><div class="ttdeci">std::string tstring</div><div class="ttdef"><b>Definition:</b> <a href="_string_tools_8h_source.html#l00078">StringTools.h:78</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_a46806acd910e12ac9b1817fffd16088e"><div class="ttname"><a href="_share_api_8cpp.html#a46806acd910e12ac9b1817fffd16088e">__CheckAllEvent</a></div><div class="ttdeci">bool __CheckAllEvent(PEVENTFD *pEvent, int nEventCount)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01334">ShareApi.cpp:1334</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a1a12fe17284d65b76175e2ea80279f9e"><div class="ttname"><a href="namespace_share_api.html#a1a12fe17284d65b76175e2ea80279f9e">ShareApi::CreateMutex</a></div><div class="ttdeci">LIBTOOLS SYNCHANDLE CreateMutex()</div><div class="ttdoc">创建锁</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01210">ShareApi.cpp:1210</a></div></div>
<div class="ttc" id="astruct___f_i_l_e_f_i_n_d_i_n_f_o___html_a3e6510c0f73543a8d7adf32441236814"><div class="ttname"><a href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a3e6510c0f73543a8d7adf32441236814">_FILEFINDINFO_::fwFileAttributes</a></div><div class="ttdeci">DWORD fwFileAttributes</div><div class="ttdoc">文件属性 参见:文件属性</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00314">tools.h:314</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aae939585936b972d0fba0a064278f6dd"><div class="ttname"><a href="namespace_share_api.html#aae939585936b972d0fba0a064278f6dd">ShareApi::InterlockedIncrement</a></div><div class="ttdeci">LIBTOOLS long InterlockedIncrement(long *Addend)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01786">ShareApi.cpp:1786</a></div></div>
<div class="ttc" id="atools_8h_html_a3c580687c3aced8196380525e9532973"><div class="ttname"><a href="tools_8h.html#a3c580687c3aced8196380525e9532973">FILE_SEEK_END</a></div><div class="ttdeci">#define FILE_SEEK_END</div><div class="ttdoc">定位到结束位置</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00292">tools.h:292</a></div></div>
<div class="ttc" id="atools_8h_html_aaa2bb929a5d07a095aaffb7f91ae2c73"><div class="ttname"><a href="tools_8h.html#aaa2bb929a5d07a095aaffb7f91ae2c73">FILE_READWRITE</a></div><div class="ttdeci">#define FILE_READWRITE</div><div class="ttdoc">读写</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00281">tools.h:281</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a29fcdef9c215ce0009e28dd52ba2c853"><div class="ttname"><a href="namespace_share_api.html#a29fcdef9c215ce0009e28dd52ba2c853">ShareApi::CloseFile</a></div><div class="ttdeci">LIBTOOLS void CloseFile(FILE_HANDLE hFile)</div><div class="ttdoc">关闭一个文件句柄</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00227">ShareApi.cpp:227</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a13aef8d6aaac3071ccedf693c7d03f27"><div class="ttname"><a href="namespace_share_api.html#a13aef8d6aaac3071ccedf693c7d03f27">ShareApi::WaitForMultipleEvents</a></div><div class="ttdeci">LIBTOOLS DWORD WaitForMultipleEvents(SYNCHANDLE *hEvents, int nEventCount, BOOL bWaitAll, DWORD dwWaitOut)</div><div class="ttdoc">等待多个事件对象有信号</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01439">ShareApi.cpp:1439</a></div></div>
<div class="ttc" id="atools_8h_html_a7c3bbd9732668a3188d931034a5f230b"><div class="ttname"><a href="tools_8h.html#a7c3bbd9732668a3188d931034a5f230b">FILE_SEEK_CUR</a></div><div class="ttdeci">#define FILE_SEEK_CUR</div><div class="ttdoc">定位当前位置</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00290">tools.h:290</a></div></div>
<div class="ttc" id="a_string_tools_8cpp_html_accff640a08f04f7443e0da4eb25a4cf0"><div class="ttname"><a href="_string_tools_8cpp.html#accff640a08f04f7443e0da4eb25a4cf0">format_s</a></div><div class="ttdeci">std::string LIBTOOLS format_s(size_t bufSize, const char *mat,...)</div><div class="ttdef"><b>Definition:</b> <a href="_string_tools_8cpp_source.html#l00147">StringTools.cpp:147</a></div></div>
<div class="ttc" id="atools_8h_html_a65c91f8d7af3c67b8a21e089fdddd0fe"><div class="ttname"><a href="tools_8h.html#a65c91f8d7af3c67b8a21e089fdddd0fe">TCHAR</a></div><div class="ttdeci">#define TCHAR</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00187">tools.h:187</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a608cadd04e1c250b35997658e0390cc7"><div class="ttname"><a href="namespace_share_api.html#a608cadd04e1c250b35997658e0390cc7">ShareApi::GetTickCount64</a></div><div class="ttdeci">LIBTOOLS DWORD64 GetTickCount64()</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01828">ShareApi.cpp:1828</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ae618bc7d8ba275d84cb5b7b984d41613"><div class="ttname"><a href="namespace_share_api.html#ae618bc7d8ba275d84cb5b7b984d41613">ShareApi::NotifyAllCondVariable</a></div><div class="ttdeci">LIBTOOLS BOOL NotifyAllCondVariable(SYNCHANDLE hCond)</div><div class="ttdoc">唤醒所有线程上的等待的条件变量</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01651">ShareApi.cpp:1651</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a1ed844c1fb6e16ef713828402c8200a2"><div class="ttname"><a href="namespace_share_api.html#a1ed844c1fb6e16ef713828402c8200a2">ShareApi::Utf8ToUnicode</a></div><div class="ttdeci">LIBTOOLS size_t Utf8ToUnicode(WCHAR *des, size_t size, const char *src, size_t srcLen=0)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00693">ShareApi.cpp:693</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_ac865becd9fe05133047f74738b75841f"><div class="ttname"><a href="_share_api_8cpp.html#ac865becd9fe05133047f74738b75841f">printStack</a></div><div class="ttdeci">void printStack()</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l02014">ShareApi.cpp:2014</a></div></div>
<div class="ttc" id="astruct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a_html"><div class="ttname"><a href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html">__INLINE_THREAD_DATA</a></div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01093">ShareApi.cpp:1093</a></div></div>
<div class="ttc" id="astruct___e_v_e_n_t_f_d_html_ac91577373328fecd20b241ea52602ba5"><div class="ttname"><a href="struct___e_v_e_n_t_f_d.html#ac91577373328fecd20b241ea52602ba5">_EVENTFD::waitcount</a></div><div class="ttdeci">int waitcount</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00074">__tools.h:74</a></div></div>
<div class="ttc" id="atools_8h_html_a9e181d2bb4fac187cebfbb1445795120"><div class="ttname"><a href="tools_8h.html#a9e181d2bb4fac187cebfbb1445795120">DOE_DOT_COUNT</a></div><div class="ttdeci">#define DOE_DOT_COUNT</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00270">tools.h:270</a></div></div>
<div class="ttc" id="atools_8h_html_a5fc7b9645f751ccc053f6f59ab0d8924"><div class="ttname"><a href="tools_8h.html#a5fc7b9645f751ccc053f6f59ab0d8924">TEXT</a></div><div class="ttdeci">#define TEXT(str)</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00195">tools.h:195</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a647b7c405fa0d8d21c4d1da509fc58ec"><div class="ttname"><a href="namespace_share_api.html#a647b7c405fa0d8d21c4d1da509fc58ec">ShareApi::InterlockedDecrement64</a></div><div class="ttdeci">LIBTOOLS INT64 InterlockedDecrement64(INT64 *Addend)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01796">ShareApi.cpp:1796</a></div></div>
<div class="ttc" id="a_string_tools_8h_html_a3f424acff193363c7e54626a35b90e69"><div class="ttname"><a href="_string_tools_8h.html#a3f424acff193363c7e54626a35b90e69">TO_STRING</a></div><div class="ttdeci">#define TO_STRING(str)</div><div class="ttdef"><b>Definition:</b> <a href="_string_tools_8h_source.html#l00077">StringTools.h:77</a></div></div>
<div class="ttc" id="a____tools_8h_html_a5426e8dc0277759ec246d58996aa8e65"><div class="ttname"><a href="____tools_8h.html#a5426e8dc0277759ec246d58996aa8e65">PMTINFO</a></div><div class="ttdeci">struct _MUTEXINFO * PMTINFO</div></div>
<div class="ttc" id="atools_8h_html_a3862008c58f4f60e0ec669c245af26d1"><div class="ttname"><a href="tools_8h.html#a3862008c58f4f60e0ec669c245af26d1">FILE_DIR</a></div><div class="ttdeci">#define FILE_DIR</div><div class="ttdoc">目录</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00299">tools.h:299</a></div></div>
<div class="ttc" id="anamespace_share_api_html_afe403ffbb6f46bfd43aa404c5b462e7f"><div class="ttname"><a href="namespace_share_api.html#afe403ffbb6f46bfd43aa404c5b462e7f">ShareApi::itoa</a></div><div class="ttdeci">LIBTOOLS size_t itoa(int value, char *szValue, size_t size)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00845">ShareApi.cpp:845</a></div></div>
<div class="ttc" id="atools_8h_html_a449fb273a677a26fb84d3328dfb0da09"><div class="ttname"><a href="tools_8h.html#a449fb273a677a26fb84d3328dfb0da09">FILE_CREATEPLUS</a></div><div class="ttdeci">#define FILE_CREATEPLUS</div><div class="ttdoc">如果文件不存在则创建此文件，存在则打开它</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00287">tools.h:287</a></div></div>
<div class="ttc" id="atools_8h_html_ad253c68ce58b12b277fedc2d785d7977"><div class="ttname"><a href="tools_8h.html#ad253c68ce58b12b277fedc2d785d7977">_tcslen</a></div><div class="ttdeci">#define _tcslen</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00189">tools.h:189</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a510d88717f432bba3b53a87989044492"><div class="ttname"><a href="namespace_share_api.html#a510d88717f432bba3b53a87989044492">ShareApi::InterlockedExchangeAdd64</a></div><div class="ttdeci">LIBTOOLS INT64 InterlockedExchangeAdd64(INT64 *Addend, INT64 Value)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01745">ShareApi.cpp:1745</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ac4bb4bd0533fccd041039f9c51f1242d"><div class="ttname"><a href="namespace_share_api.html#ac4bb4bd0533fccd041039f9c51f1242d">ShareApi::FindNextFile</a></div><div class="ttdeci">LIBTOOLS BOOL FindNextFile(FILE_HANDLE hFile, PFILEFINDINFO pInfo)</div><div class="ttdoc">继续遍历目录</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00374">ShareApi.cpp:374</a></div></div>
<div class="ttc" id="atools_8h_html_aa8cecfc5c5c054d2875c03e77b7be15d"><div class="ttname"><a href="tools_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a></div><div class="ttdeci">#define TRUE</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00147">tools.h:147</a></div></div>
<div class="ttc" id="atools_8h_html_adbfeae90dcbc6d1e23fc52bb64339f46"><div class="ttname"><a href="tools_8h.html#adbfeae90dcbc6d1e23fc52bb64339f46">DWORD64</a></div><div class="ttdeci">unsigned long long DWORD64</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00135">tools.h:135</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a7b6335c0eefe4ed1f01963638bc708b8"><div class="ttname"><a href="namespace_share_api.html#a7b6335c0eefe4ed1f01963638bc708b8">ShareApi::CreateEvent</a></div><div class="ttdeci">LIBTOOLS SYNCHANDLE CreateEvent(BOOL bEvent=FALSE, BOOL bAuto=TRUE)</div><div class="ttdoc">创建事件</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01257">ShareApi.cpp:1257</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a65d31568eb4e185474be493a8a9ec749"><div class="ttname"><a href="namespace_share_api.html#a65d31568eb4e185474be493a8a9ec749">ShareApi::LoadSymbol</a></div><div class="ttdeci">LIBTOOLS void * LoadSymbol(HANDLE dlHandle, const TCHAR *symbol)</div><div class="ttdoc">载入动态库中的导出符号</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l02162">ShareApi.cpp:2162</a></div></div>
<div class="ttc" id="astruct___e_v_e_n_t_f_d_html_ae77ae0efd015b180d711e7f84dd91ced"><div class="ttname"><a href="struct___e_v_e_n_t_f_d.html#ae77ae0efd015b180d711e7f84dd91ced">_EVENTFD::bAuto</a></div><div class="ttdeci">BOOL bAuto</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00076">__tools.h:76</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a5f2e8e67d4a3a8d061bd8f109762a48d"><div class="ttname"><a href="namespace_share_api.html#a5f2e8e67d4a3a8d061bd8f109762a48d">ShareApi::GetCurrentProcessId</a></div><div class="ttdeci">LIBTOOLS ULONG GetCurrentProcessId()</div><div class="ttdoc">获取当前进程的ID</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01172">ShareApi.cpp:1172</a></div></div>
<div class="ttc" id="atools_8h_html_a157a956e14c5c44b3f73ef23a4776f64"><div class="ttname"><a href="tools_8h.html#a157a956e14c5c44b3f73ef23a4776f64">LINUX</a></div><div class="ttdeci">#define LINUX</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00051">tools.h:51</a></div></div>
<div class="ttc" id="atools_8h_html_abb2c63c1933cab709a4fd4aef2012bbb"><div class="ttname"><a href="tools_8h.html#abb2c63c1933cab709a4fd4aef2012bbb">WAIT_OBJECT_0</a></div><div class="ttdeci">#define WAIT_OBJECT_0</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00160">tools.h:160</a></div></div>
<div class="ttc" id="atools_8h_html_a7ffc5eed915079f22f24d5ac0b81a2cb"><div class="ttname"><a href="tools_8h.html#a7ffc5eed915079f22f24d5ac0b81a2cb">THREAD_STACK_MIN</a></div><div class="ttdeci">#define THREAD_STACK_MIN</div><div class="ttdoc">线程最小的堆栈</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00331">tools.h:331</a></div></div>
<div class="ttc" id="a_share_api_8h_html"><div class="ttname"><a href="_share_api_8h.html">ShareApi.h</a></div></div>
<div class="ttc" id="aunion___l_a_r_g_e___i_n_t_e_g_e_r_html_a34beb9c05c3a2982d57fc450cc934ae3"><div class="ttname"><a href="union___l_a_r_g_e___i_n_t_e_g_e_r.html#a34beb9c05c3a2982d57fc450cc934ae3">_LARGE_INTEGER::QuadPart</a></div><div class="ttdeci">LONGLONG QuadPart</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00211">tools.h:211</a></div></div>
<div class="ttc" id="astruct___c_o_n_d_v_a_r_i_n_f_o___html_aef6b078a30d1d642faa98e25c0da5c1c"><div class="ttname"><a href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#aef6b078a30d1d642faa98e25c0da5c1c">_CONDVARINFO_::attr</a></div><div class="ttdeci">pthread_condattr_t attr</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00036">__tools.h:36</a></div></div>
<div class="ttc" id="anamespace_share_api_html_af058258537f5205e21395182fcc04208"><div class="ttname"><a href="namespace_share_api.html#af058258537f5205e21395182fcc04208">ShareApi::GetLastError</a></div><div class="ttdeci">LIBTOOLS DWORD GetLastError()</div><div class="ttdoc">返回上一次函数的错误值</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00049">ShareApi.cpp:49</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_a235ee25c210b288833c078fed20a9af1"><div class="ttname"><a href="_share_api_8cpp.html#a235ee25c210b288833c078fed20a9af1">_trim_float_zero_</a></div><div class="ttdeci">size_t _trim_float_zero_(char *szValue, size_t size)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00854">ShareApi.cpp:854</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ae6dfe98d6e51d6c8a3a612de99f840b2"><div class="ttname"><a href="namespace_share_api.html#ae6dfe98d6e51d6c8a3a612de99f840b2">ShareApi::UnicodeToUtf8</a></div><div class="ttdeci">LIBTOOLS size_t UnicodeToUtf8(char *des, size_t size, const WCHAR *src, size_t srcLen=0)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00784">ShareApi.cpp:784</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_a244a92bd6149956ae79daba453c0e5db"><div class="ttname"><a href="_share_api_8cpp.html#a244a92bd6149956ae79daba453c0e5db">deal_signal</a></div><div class="ttdeci">void deal_signal(int s, siginfo_t *si, void *unused)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l02030">ShareApi.cpp:2030</a></div></div>
<div class="ttc" id="atools_8h_html_a8514632137dc62e5830efc0921eaf1a5"><div class="ttname"><a href="tools_8h.html#a8514632137dc62e5830efc0921eaf1a5">sprintf_safe</a></div><div class="ttdeci">size_t sprintf_safe(char *str, size_t size, const char *format,...)</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00381">tools.h:381</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a7ee205cb7095e6d00b9631fa1857a6c3"><div class="ttname"><a href="namespace_share_api.html#a7ee205cb7095e6d00b9631fa1857a6c3">ShareApi::CloseEvent</a></div><div class="ttdeci">LIBTOOLS void CloseEvent(SYNCHANDLE hEvent)</div><div class="ttdoc">销毁事件句柄</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01558">ShareApi.cpp:1558</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a33259cc2e33070f75643c9836fa6befa"><div class="ttname"><a href="namespace_share_api.html#a33259cc2e33070f75643c9836fa6befa">ShareApi::IsDirent</a></div><div class="ttdeci">LIBTOOLS BOOL IsDirent(const TCHAR *szDir)</div><div class="ttdoc">检查目录是否存在</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00460">ShareApi.cpp:460</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a9d058caff66f8dd3726492a2ef6fc15f"><div class="ttname"><a href="namespace_share_api.html#a9d058caff66f8dd3726492a2ef6fc15f">ShareApi::GbkToUtf8</a></div><div class="ttdeci">LIBTOOLS size_t GbkToUtf8(char *des, size_t size, const char *src, size_t srcLen=0)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00558">ShareApi.cpp:558</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_acea67912e789b238c7cada81b7b07b8e"><div class="ttname"><a href="_share_api_8cpp.html#acea67912e789b238c7cada81b7b07b8e">__SetSelectEvent</a></div><div class="ttdeci">int __SetSelectEvent(PEVENTFD *pEvent, int nEventCount, fd_set *rset, fd_set *eset, std::map&lt; int, PEVENTFD * &gt; &amp;mefds)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01358">ShareApi.cpp:1358</a></div></div>
<div class="ttc" id="atools_8h_html_a201ce692c9dca6599e5c12d00167419b"><div class="ttname"><a href="tools_8h.html#a201ce692c9dca6599e5c12d00167419b">DEF_BEG_LIBTOOLS</a></div><div class="ttdeci">#define DEF_BEG_LIBTOOLS</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00036">tools.h:36</a></div></div>
<div class="ttc" id="atools_8h_html_af559a7ae68520d96f21d0655d6792508"><div class="ttname"><a href="tools_8h.html#af559a7ae68520d96f21d0655d6792508">LONGLONG</a></div><div class="ttdeci">long long LONGLONG</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00129">tools.h:129</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a62f4cba03d9da2cb150f2a6ccda04061"><div class="ttname"><a href="namespace_share_api.html#a62f4cba03d9da2cb150f2a6ccda04061">ShareApi::AS_CPY_WS</a></div><div class="ttdeci">LIBTOOLS BOOL AS_CPY_WS(size_t size, WCHAR *des, const char *src)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00633">ShareApi.cpp:633</a></div></div>
<div class="ttc" id="atools_8h_html_aad61bc3eae1804d8784adebdce0721d3"><div class="ttname"><a href="tools_8h.html#aad61bc3eae1804d8784adebdce0721d3">WCHAR</a></div><div class="ttdeci">wchar_t WCHAR</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00131">tools.h:131</a></div></div>
<div class="ttc" id="atools_8h_html_ae48026a3828fdacfa90766cf5f2448cf"><div class="ttname"><a href="tools_8h.html#ae48026a3828fdacfa90766cf5f2448cf">FILE_TRUC</a></div><div class="ttdeci">#define FILE_TRUC</div><div class="ttdoc">清空</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00284">tools.h:284</a></div></div>
<div class="ttc" id="atools_8h_html_aa84a29002ab81c719c0d07bb446296e0"><div class="ttname"><a href="tools_8h.html#aa84a29002ab81c719c0d07bb446296e0">INFINITE</a></div><div class="ttdeci">#define INFINITE</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00159">tools.h:159</a></div></div>
<div class="ttc" id="atools_8h_html_ac5425c25bf79dba241265bcc8f869715"><div class="ttname"><a href="tools_8h.html#ac5425c25bf79dba241265bcc8f869715">WAIT_FAILED</a></div><div class="ttdeci">#define WAIT_FAILED</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00162">tools.h:162</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a431b116518daffebc87c866b65aacfa2"><div class="ttname"><a href="namespace_share_api.html#a431b116518daffebc87c866b65aacfa2">ShareApi::WS_CPY_UTF8</a></div><div class="ttdeci">LIBTOOLS BOOL WS_CPY_UTF8(size_t size, char *des, const WCHAR *src)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00777">ShareApi.cpp:777</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ac677a9c487af4ea8e2a3c14c4a5593e6"><div class="ttname"><a href="namespace_share_api.html#ac677a9c487af4ea8e2a3c14c4a5593e6">ShareApi::CloseDll</a></div><div class="ttdeci">LIBTOOLS void CloseDll(HANDLE dlHandle)</div><div class="ttdoc">关闭打开的动态库句柄</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l02178">ShareApi.cpp:2178</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a7a89280226b06d9a20b2b37316742d60"><div class="ttname"><a href="namespace_share_api.html#a7a89280226b06d9a20b2b37316742d60">ShareApi::CloseThread</a></div><div class="ttdeci">LIBTOOLS void CloseThread(THREADPTR thHandle)</div><div class="ttdoc">关闭线程对象句柄</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01181">ShareApi.cpp:1181</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a4b481d0807997fab0917801a3203aad7"><div class="ttname"><a href="namespace_share_api.html#a4b481d0807997fab0917801a3203aad7">ShareApi::ReadFile</a></div><div class="ttdeci">LIBTOOLS fsize_t ReadFile(FILE_HANDLE hFile, void *buf, fsize_t size)</div><div class="ttdoc">读取文件数据</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00236">ShareApi.cpp:236</a></div></div>
<div class="ttc" id="a____tools_8h_html_a8654b261ddc7d0250704595f9be92898"><div class="ttname"><a href="____tools_8h.html#a8654b261ddc7d0250704595f9be92898">PCONDVARINFO</a></div><div class="ttdeci">struct _CONDVARINFO_ * PCONDVARINFO</div></div>
<div class="ttc" id="a_share_api_8cpp_html_ac4b56387d2597207e125ebeb29d8179f"><div class="ttname"><a href="_share_api_8cpp.html#ac4b56387d2597207e125ebeb29d8179f">CPU_TICK_TIME</a></div><div class="ttdeci">#define CPU_TICK_TIME</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00043">ShareApi.cpp:43</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a42cc4f5c3ce6a37fa32f97be13c5d300"><div class="ttname"><a href="namespace_share_api.html#a42cc4f5c3ce6a37fa32f97be13c5d300">ShareApi::strnicmp</a></div><div class="ttdeci">LIBTOOLS size_t strnicmp(const char *str1, const char *str2, size_t count)</div><div class="ttdoc">忽略大小写比较两个字符串,最多比较count个字符</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01029">ShareApi.cpp:1029</a></div></div>
<div class="ttc" id="atools_8h_html_a5578de68603dc6185924f95f1ae4be6e"><div class="ttname"><a href="tools_8h.html#a5578de68603dc6185924f95f1ae4be6e">WAIT_TIMEOUT</a></div><div class="ttdeci">#define WAIT_TIMEOUT</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00161">tools.h:161</a></div></div>
<div class="ttc" id="astruct_____dir_info_html_a7aa17ca5adb455c000e735f6b95c0664"><div class="ttname"><a href="struct_____dir_info.html#a7aa17ca5adb455c000e735f6b95c0664">__DirInfo::szDir</a></div><div class="ttdeci">TCHAR szDir[MAX_PATH]</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00111">__tools.h:111</a></div></div>
<div class="ttc" id="a_find_file_8h_html_a37cc1038758216808d5f75090b093c9a"><div class="ttname"><a href="_find_file_8h.html#a37cc1038758216808d5f75090b093c9a">int</a></div><div class="ttdeci">DEF_BEG_LIBTOOLS typedef int(__stdcall *_CallBackFindFile)(TCHAR *szCurPath</div><div class="ttdoc">遍历目录的回调函数</div></div>
<div class="ttc" id="a_share_api_8cpp_html_a98b540b0b01c13424dda5763a9c99fb9"><div class="ttname"><a href="_share_api_8cpp.html#a98b540b0b01c13424dda5763a9c99fb9">__ReadEfdInfo</a></div><div class="ttdeci">int __ReadEfdInfo(std::map&lt; int, PEVENTFD * &gt; &amp;mefds, fd_set *rset, fd_set *eset, DWORD &amp;dwRet, PEVENTFD *efds)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01376">ShareApi.cpp:1376</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a8f77f0ed93c1add64d17085612759c2e"><div class="ttname"><a href="namespace_share_api.html#a8f77f0ed93c1add64d17085612759c2e">ShareApi::CloseMutex</a></div><div class="ttdeci">LIBTOOLS void CloseMutex(SYNCHANDLE hMutex)</div><div class="ttdoc">销毁锁</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01247">ShareApi.cpp:1247</a></div></div>
<div class="ttc" id="atools_8h_html_ae2c4c68b8f9b63358f8c8f32b77ecb09"><div class="ttname"><a href="tools_8h.html#ae2c4c68b8f9b63358f8c8f32b77ecb09">FILE_SEEK_SET</a></div><div class="ttdeci">#define FILE_SEEK_SET</div><div class="ttdoc">定位开始位置</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00291">tools.h:291</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aa728fde57f4dbb2293a3c924cf0a379d"><div class="ttname"><a href="namespace_share_api.html#aa728fde57f4dbb2293a3c924cf0a379d">ShareApi::AS_CPY_UTF8</a></div><div class="ttdeci">LIBTOOLS BOOL AS_CPY_UTF8(size_t size, char *des, const char *src)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00551">ShareApi.cpp:551</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a4d8aa14a00b0d34d476dece859c6203b"><div class="ttname"><a href="namespace_share_api.html#a4d8aa14a00b0d34d476dece859c6203b">ShareApi::UTF8_CPY_AS</a></div><div class="ttdeci">LIBTOOLS BOOL UTF8_CPY_AS(size_t size, char *des, const char *src)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00592">ShareApi.cpp:592</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aafc83846014294f90fd16a5649dfd550"><div class="ttname"><a href="namespace_share_api.html#aafc83846014294f90fd16a5649dfd550">ShareApi::GbkToUnicode</a></div><div class="ttdeci">LIBTOOLS size_t GbkToUnicode(WCHAR *des, size_t size, const char *src, size_t srcLen=0)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00640">ShareApi.cpp:640</a></div></div>
<div class="ttc" id="astruct___e_v_e_n_t_f_d_html_a9f69ebc6edc2c4cea9a240ce922bc485"><div class="ttname"><a href="struct___e_v_e_n_t_f_d.html#a9f69ebc6edc2c4cea9a240ce922bc485">_EVENTFD::bEvent</a></div><div class="ttdeci">BOOL bEvent</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00075">__tools.h:75</a></div></div>
<div class="ttc" id="atools_8h_html_a2c2000c5cd1b5ee50319176e11045bc4"><div class="ttname"><a href="tools_8h.html#a2c2000c5cd1b5ee50319176e11045bc4">tcscpy_safe</a></div><div class="ttdeci">#define tcscpy_safe</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00199">tools.h:199</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a6fd951b223aa9382df1d9820bb04072e"><div class="ttname"><a href="namespace_share_api.html#a6fd951b223aa9382df1d9820bb04072e">ShareApi::PrintDumpInfo</a></div><div class="ttdeci">LIBTOOLS void PrintDumpInfo(bool bPrintConsole=false)</div><div class="ttdoc">打印异常后函数调用堆栈信息</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l02055">ShareApi.cpp:2055</a></div></div>
<div class="ttc" id="astruct_____dir_info_html_a1edd4b3d5747cf3b79633bbf83bf7929"><div class="ttname"><a href="struct_____dir_info.html#a1edd4b3d5747cf3b79633bbf83bf7929">__DirInfo::pDir</a></div><div class="ttdeci">DIR * pDir</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00110">__tools.h:110</a></div></div>
<div class="ttc" id="atools_8h_html_ad5d1d4448f0dd70f644916217fa0f5d6"><div class="ttname"><a href="tools_8h.html#ad5d1d4448f0dd70f644916217fa0f5d6">THREADPTR</a></div><div class="ttdeci">#define THREADPTR</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00327">tools.h:327</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aa247d107f7e439e2c6871dfba195a022"><div class="ttname"><a href="namespace_share_api.html#aa247d107f7e439e2c6871dfba195a022">ShareApi::GetCurrentThreadId</a></div><div class="ttdeci">LIBTOOLS ULONG GetCurrentThreadId()</div><div class="ttdoc">获取当前线程ID</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01163">ShareApi.cpp:1163</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a95bbd5d2f49d29511d8a53e60339ff08"><div class="ttname"><a href="namespace_share_api.html#a95bbd5d2f49d29511d8a53e60339ff08">ShareApi::ltoa</a></div><div class="ttdeci">LIBTOOLS size_t ltoa(long_t value, char *szValue, size_t size)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00832">ShareApi.cpp:832</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ac7a2d28aa9970323f90bf16ad0e039ac"><div class="ttname"><a href="namespace_share_api.html#ac7a2d28aa9970323f90bf16ad0e039ac">ShareApi::Thread_Join</a></div><div class="ttdeci">LIBTOOLS BOOL Thread_Join(THREADPTR thHandle)</div><div class="ttdoc">等待线程结束</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01190">ShareApi.cpp:1190</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a042cb4f7a8ef64c76911a3c95caf3bb1"><div class="ttname"><a href="namespace_share_api.html#a042cb4f7a8ef64c76911a3c95caf3bb1">ShareApi::lltoa</a></div><div class="ttdeci">LIBTOOLS size_t lltoa(INT64 value, char *szValue, size_t size)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00814">ShareApi.cpp:814</a></div></div>
<div class="ttc" id="astruct___c_o_n_d_v_a_r_i_n_f_o___html_a0905ec3d739c2ff2fef2c07985910ae4"><div class="ttname"><a href="struct___c_o_n_d_v_a_r_i_n_f_o__.html#a0905ec3d739c2ff2fef2c07985910ae4">_CONDVARINFO_::cond</a></div><div class="ttdeci">pthread_cond_t cond</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00035">__tools.h:35</a></div></div>
<div class="ttc" id="a____tools_8h_html"><div class="ttname"><a href="____tools_8h.html">__tools.h</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a1cf67c0b1b748d5d51ec8dbd0f7aaae4"><div class="ttname"><a href="namespace_share_api.html#a1cf67c0b1b748d5d51ec8dbd0f7aaae4">ShareApi::InterlockedDecrement</a></div><div class="ttdeci">LIBTOOLS long InterlockedDecrement(long *Addend)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01801">ShareApi.cpp:1801</a></div></div>
<div class="ttc" id="atools_8h_html_a591d71072e6cd28616bc61e3b7b337c5"><div class="ttname"><a href="tools_8h.html#a591d71072e6cd28616bc61e3b7b337c5">FILE_SYSTYPE</a></div><div class="ttdeci">#define FILE_SYSTYPE</div><div class="ttdoc">系统其它文件</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00301">tools.h:301</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a8723a4c07d1482980a46b2f650bd2e5e"><div class="ttname"><a href="namespace_share_api.html#a8723a4c07d1482980a46b2f650bd2e5e">ShareApi::GetFileSize</a></div><div class="ttdeci">LIBTOOLS int GetFileSize(FILE_HANDLE hFile)</div><div class="ttdoc">参考GetFileSizeEx的说明</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00159">ShareApi.cpp:159</a></div></div>
<div class="ttc" id="astruct___m_u_t_e_x_i_n_f_o_html"><div class="ttname"><a href="struct___m_u_t_e_x_i_n_f_o.html">_MUTEXINFO</a></div><div class="ttdoc">内部使用结构体 锁结构体</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00017">__tools.h:17</a></div></div>
<div class="ttc" id="atools_8h_html_af632da489ebc3708ec3ab6791ee53fa4"><div class="ttname"><a href="tools_8h.html#af632da489ebc3708ec3ab6791ee53fa4">ULONG</a></div><div class="ttdeci">unsigned long ULONG</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00136">tools.h:136</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a52ea018b9be6f951d2bdce36cc0eae15"><div class="ttname"><a href="namespace_share_api.html#a52ea018b9be6f951d2bdce36cc0eae15">ShareApi::SetFilePointerEx</a></div><div class="ttdeci">LIBTOOLS BOOL SetFilePointerEx(FILE_HANDLE hFile, INT64 dwOffset, int iWhence)</div><div class="ttdoc">定位文件指针</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00174">ShareApi.cpp:174</a></div></div>
<div class="ttc" id="a____tools_8h_html_aed7a8fbfa2ff233f4bb75136e358354b"><div class="ttname"><a href="____tools_8h.html#aed7a8fbfa2ff233f4bb75136e358354b">PEVENTFD</a></div><div class="ttdeci">struct _EVENTFD * PEVENTFD</div></div>
<div class="ttc" id="atools_8h_html_ac909db71799bb22cb7d636a34cd785e4"><div class="ttname"><a href="tools_8h.html#ac909db71799bb22cb7d636a34cd785e4">DEF_END_LIBTOOLS</a></div><div class="ttdeci">#define DEF_END_LIBTOOLS</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00038">tools.h:38</a></div></div>
<div class="ttc" id="atools_8h_html_a4e9d5b8d36af265f708cc1e3824712e5"><div class="ttname"><a href="tools_8h.html#a4e9d5b8d36af265f708cc1e3824712e5">MINUX_DOE_DOT</a></div><div class="ttdeci">#define MINUX_DOE_DOT</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00269">tools.h:269</a></div></div>
<div class="ttc" id="atools_8h_html_a8c4b94ef011acbcc6359107d2efb3d25"><div class="ttname"><a href="tools_8h.html#a8c4b94ef011acbcc6359107d2efb3d25">ThreadRoutine</a></div><div class="ttdeci">DWORD(* ThreadRoutine)(void *arg)</div><div class="ttdoc">线程函数指针</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00334">tools.h:334</a></div></div>
<div class="ttc" id="anamespace_share_api_html_adda5f5c83e04637a92905f9f4164f075"><div class="ttname"><a href="namespace_share_api.html#adda5f5c83e04637a92905f9f4164f075">ShareApi::Utf8ToGbk</a></div><div class="ttdeci">LIBTOOLS size_t Utf8ToGbk(char *des, size_t size, const char *src, size_t srcLen=0)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00599">ShareApi.cpp:599</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a4b416e5e159ac50d2c18a1f77a0ea734"><div class="ttname"><a href="namespace_share_api.html#a4b416e5e159ac50d2c18a1f77a0ea734">ShareApi::LoadDll</a></div><div class="ttdeci">LIBTOOLS HANDLE LoadDll(const TCHAR *dllName)</div><div class="ttdoc">动态载入dll/so库函数</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l02146">ShareApi.cpp:2146</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ab284a7efaf7111e839b66df283157fea"><div class="ttname"><a href="namespace_share_api.html#ab284a7efaf7111e839b66df283157fea">ShareApi::ultoa</a></div><div class="ttdeci">LIBTOOLS size_t ultoa(UINT64 value, char *szValue, size_t size)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00823">ShareApi.cpp:823</a></div></div>
<div class="ttc" id="atools_8h_html_af330a390be3908796a20f19c2f29bac4"><div class="ttname"><a href="tools_8h.html#af330a390be3908796a20f19c2f29bac4">FILE_NORMAL</a></div><div class="ttdeci">#define FILE_NORMAL</div><div class="ttdoc">常规的存档文件</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00300">tools.h:300</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a58553d013a36ffb0eb150b0eec157c63"><div class="ttname"><a href="namespace_share_api.html#a58553d013a36ffb0eb150b0eec157c63">ShareApi::Global_GetLastError</a></div><div class="ttdeci">LIBTOOLS TCHAR * Global_GetLastError(DWORD *pError=NULL)</div><div class="ttdoc">获取错误信息</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00508">ShareApi.cpp:508</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a714ae756abbd2497307c649f6e9259c2"><div class="ttname"><a href="namespace_share_api.html#a714ae756abbd2497307c649f6e9259c2">ShareApi::FindFirstFile</a></div><div class="ttdeci">LIBTOOLS FILE_HANDLE FindFirstFile(const TCHAR *szDir, PFILEFINDINFO pInfo)</div><div class="ttdoc">文件遍历，win32中不用主动加上*.</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00290">ShareApi.cpp:290</a></div></div>
<div class="ttc" id="atools_8h_html_ab99ded389af74001a6298fc9e44e74e5"><div class="ttname"><a href="tools_8h.html#ab99ded389af74001a6298fc9e44e74e5">MAX_PATH</a></div><div class="ttdeci">#define MAX_PATH</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00149">tools.h:149</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a6a96c0bb1d6b9ad1fdb25a055e7ed85c"><div class="ttname"><a href="namespace_share_api.html#a6a96c0bb1d6b9ad1fdb25a055e7ed85c">ShareApi::CreateCondVariable</a></div><div class="ttdeci">LIBTOOLS SYNCHANDLE CreateCondVariable()</div><div class="ttdoc">创建条件变量</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01570">ShareApi.cpp:1570</a></div></div>
<div class="ttc" id="aclass_c_time_tools_html_ade52c34673cca32faab3ac984e1b40c5"><div class="ttname"><a href="class_c_time_tools.html#ade52c34673cca32faab3ac984e1b40c5">CTimeTools::GetDateStr</a></div><div class="ttdeci">static std::string GetDateStr(int chDate='-')</div><div class="ttdoc">获取当前日期字符串(年月日时分秒毫秒)</div><div class="ttdef"><b>Definition:</b> <a href="_time_8cpp_source.html#l00049">Time.cpp:49</a></div></div>
<div class="ttc" id="anamespace_share_api_html_acd17304851a877042934e8967d7ac27e"><div class="ttname"><a href="namespace_share_api.html#acd17304851a877042934e8967d7ac27e">ShareApi::GetFilePointer</a></div><div class="ttdeci">LIBTOOLS int GetFilePointer(FILE_HANDLE hFile)</div><div class="ttdoc">参考GetFilePointerEx的函数说明</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00214">ShareApi.cpp:214</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a33be1b774a30a60e8f134e9a54e754f0"><div class="ttname"><a href="namespace_share_api.html#a33be1b774a30a60e8f134e9a54e754f0">ShareApi::NotifyCondVariable</a></div><div class="ttdeci">LIBTOOLS BOOL NotifyCondVariable(SYNCHANDLE hCond)</div><div class="ttdoc">唤醒单个线程上的等待的条件变量</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01668">ShareApi.cpp:1668</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a1feb20a6d3425c35c0022f486d106759"><div class="ttname"><a href="namespace_share_api.html#a1feb20a6d3425c35c0022f486d106759">ShareApi::UnicodeToGbk</a></div><div class="ttdeci">LIBTOOLS size_t UnicodeToGbk(char *des, size_t size, const WCHAR *src, size_t srcLen=0)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00746">ShareApi.cpp:746</a></div></div>
<div class="ttc" id="atools_8h_html_a67d4bc2b7cce253843984b8e1bb60519"><div class="ttname"><a href="tools_8h.html#a67d4bc2b7cce253843984b8e1bb60519">MAXIMUM_WAIT_OBJECTS</a></div><div class="ttdeci">#define MAXIMUM_WAIT_OBJECTS</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00163">tools.h:163</a></div></div>
<div class="ttc" id="astruct___m_u_t_e_x_i_n_f_o_html_a065ba05c5c3dc66fee5a4a7f5172618b"><div class="ttname"><a href="struct___m_u_t_e_x_i_n_f_o.html#a065ba05c5c3dc66fee5a4a7f5172618b">_MUTEXINFO::mutex</a></div><div class="ttdeci">pthread_mutex_t mutex</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00028">__tools.h:28</a></div></div>
<div class="ttc" id="atools_8h_html_ab521aa5010fb1afb801a899a55569e03"><div class="ttname"><a href="tools_8h.html#ab521aa5010fb1afb801a899a55569e03">HANDLE</a></div><div class="ttdeci">#define HANDLE</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00156">tools.h:156</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a3d320458a805a39a1abc145d7aa28fb6"><div class="ttname"><a href="namespace_share_api.html#a3d320458a805a39a1abc145d7aa28fb6">ShareApi::InterlockedIncrement64</a></div><div class="ttdeci">LIBTOOLS INT64 InterlockedIncrement64(INT64 *Addend)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01781">ShareApi.cpp:1781</a></div></div>
<div class="ttc" id="astruct___c_o_n_d_v_a_r_i_n_f_o___html"><div class="ttname"><a href="struct___c_o_n_d_v_a_r_i_n_f_o__.html">_CONDVARINFO_</a></div><div class="ttdoc">内部使用结构体 条件变量结构体</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00030">__tools.h:30</a></div></div>
<div class="ttc" id="astruct___e_v_e_n_t_f_d_html"><div class="ttname"><a href="struct___e_v_e_n_t_f_d.html">_EVENTFD</a></div><div class="ttdoc">内部使用结构体 时间结构体</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00071">__tools.h:71</a></div></div>
<div class="ttc" id="atools_8h_html_aa74f89aa7d942f4a79ea12d7c9b763ef"><div class="ttname"><a href="tools_8h.html#aa74f89aa7d942f4a79ea12d7c9b763ef">_In_</a></div><div class="ttdeci">#define _In_</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00155">tools.h:155</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_a22b1d11e3eb14e0c2ef221ebec5d5cd0"><div class="ttname"><a href="_share_api_8cpp.html#a22b1d11e3eb14e0c2ef221ebec5d5cd0">CheckAllEventHaveSignal</a></div><div class="ttdeci">bool CheckAllEventHaveSignal(PSGINFO pSginfos, int nSignalCount)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01702">ShareApi.cpp:1702</a></div></div>
<div class="ttc" id="atools_8h_html_ae44d8d5d0e473c82cf8f2021a86cb6a4"><div class="ttname"><a href="tools_8h.html#ae44d8d5d0e473c82cf8f2021a86cb6a4">fsize_t</a></div><div class="ttdeci">INTPTR_T fsize_t</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00237">tools.h:237</a></div></div>
<div class="ttc" id="atools_8h_html_aa93f0eb578d23995850d61f7d61c55c1"><div class="ttname"><a href="tools_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a></div><div class="ttdeci">#define FALSE</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00148">tools.h:148</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ad1a8ec9389fc2b1cbf9b7a2a10a054bd"><div class="ttname"><a href="namespace_share_api.html#ad1a8ec9389fc2b1cbf9b7a2a10a054bd">ShareApi::WriteFile</a></div><div class="ttdeci">LIBTOOLS fsize_t WriteFile(FILE_HANDLE hFile, const void *buf, fsize_t size)</div><div class="ttdoc">向文件中写入数据</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00251">ShareApi.cpp:251</a></div></div>
<div class="ttc" id="astruct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a_html_a63ae5ddd3ec594ee47d198605df9d59f"><div class="ttname"><a href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a63ae5ddd3ec594ee47d198605df9d59f">__INLINE_THREAD_DATA::bSuspend</a></div><div class="ttdeci">size_t bSuspend</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01097">ShareApi.cpp:1097</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_a571aeeb0d690e1b41abe8f9caf9ba3f7"><div class="ttname"><a href="_share_api_8cpp.html#a571aeeb0d690e1b41abe8f9caf9ba3f7">_INLINE_THREAD_DATA</a></div><div class="ttdeci">struct __INLINE_THREAD_DATA _INLINE_THREAD_DATA</div></div>
<div class="ttc" id="astruct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a_html_a6ad0e45abc99f124480f84d5ac27d82f"><div class="ttname"><a href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a6ad0e45abc99f124480f84d5ac27d82f">__INLINE_THREAD_DATA::pThreadFunc</a></div><div class="ttdeci">ThreadRoutine pThreadFunc</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01096">ShareApi.cpp:1096</a></div></div>
<div class="ttc" id="atools_8h_html_a3f16d54b8d2b6c3de321e830f99864fa"><div class="ttname"><a href="tools_8h.html#a3f16d54b8d2b6c3de321e830f99864fa">_taccess</a></div><div class="ttdeci">#define _taccess</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00192">tools.h:192</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aa020decf062bbd8dc399dd69c67a1d5b"><div class="ttname"><a href="namespace_share_api.html#aa020decf062bbd8dc399dd69c67a1d5b">ShareApi::InterlockedExchange</a></div><div class="ttdeci">LIBTOOLS long InterlockedExchange(long *Addend, long value)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01754">ShareApi.cpp:1754</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aef9c08d248e17a517235723ef2db9663"><div class="ttname"><a href="namespace_share_api.html#aef9c08d248e17a517235723ef2db9663">ShareApi::SetEvent</a></div><div class="ttdeci">LIBTOOLS BOOL SetEvent(SYNCHANDLE hEvent, BOOL bEvent)</div><div class="ttdoc">设置句柄是否有事件</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01291">ShareApi.cpp:1291</a></div></div>
<div class="ttc" id="a_string_tools_8h_html_a0a60694576e1be5888918efa92f551d2"><div class="ttname"><a href="_string_tools_8h.html#a0a60694576e1be5888918efa92f551d2">TO_TSTRING</a></div><div class="ttdeci">#define TO_TSTRING(str)</div><div class="ttdef"><b>Definition:</b> <a href="_string_tools_8h_source.html#l00079">StringTools.h:79</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a83771e6812aba75449e79e18b9220041"><div class="ttname"><a href="namespace_share_api.html#a83771e6812aba75449e79e18b9220041">ShareApi::InterlockedExchangeAdd</a></div><div class="ttdeci">LIBTOOLS long InterlockedExchangeAdd(long *Addend, long Value)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01727">ShareApi.cpp:1727</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aad0f12d8a89ce1a3ac07b25be7d4dca8"><div class="ttname"><a href="namespace_share_api.html#aad0f12d8a89ce1a3ac07b25be7d4dca8">ShareApi::llftoa</a></div><div class="ttdeci">LIBTOOLS size_t llftoa(long double value, char *szValue, size_t size, size_t dotcount=6)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00951">ShareApi.cpp:951</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_afde789754e5c22e79da0052d34310c9b"><div class="ttname"><a href="_share_api_8cpp.html#afde789754e5c22e79da0052d34310c9b">GetPosValue</a></div><div class="ttdeci">int GetPosValue(int curValue)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00058">ShareApi.cpp:58</a></div></div>
<div class="ttc" id="atools_8h_html_a798af1e30bc65f319c1a246cecf59e39"><div class="ttname"><a href="tools_8h.html#a798af1e30bc65f319c1a246cecf59e39">DWORD</a></div><div class="ttdeci">unsigned int DWORD</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00134">tools.h:134</a></div></div>
<div class="ttc" id="atools_8h_html_a9832b3ede9aaf61eccff792b9132616d"><div class="ttname"><a href="tools_8h.html#a9832b3ede9aaf61eccff792b9132616d">FLT_DOT_COUNT</a></div><div class="ttdeci">#define FLT_DOT_COUNT</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00271">tools.h:271</a></div></div>
<div class="ttc" id="a_algorithm_8h_html_a75d98bbb517773f8685c32b64ac89ff3"><div class="ttname"><a href="_algorithm_8h.html#a75d98bbb517773f8685c32b64ac89ff3">qmin</a></div><div class="ttdeci">const DEF_BEG_LIBTOOLS T &amp; qmin(const T &amp;a, const T &amp;b)</div><div class="ttdoc">返回两者较小者</div><div class="ttdef"><b>Definition:</b> <a href="_algorithm_8h_source.html#l00009">Algorithm.h:9</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a79243d634ddf21dd7486ceb02e80e360"><div class="ttname"><a href="namespace_share_api.html#a79243d634ddf21dd7486ceb02e80e360">ShareApi::Global_FreeMem</a></div><div class="ttdeci">LIBTOOLS void Global_FreeMem(TCHAR *sInfo)</div><div class="ttdoc">释放由Global_GetLastErrr函数申请的内存</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00542">ShareApi.cpp:542</a></div></div>
<div class="ttc" id="atools_8h_html_a57be03562867144161c1bfee95ca8f7c"><div class="ttname"><a href="tools_8h.html#a57be03562867144161c1bfee95ca8f7c">UINT64</a></div><div class="ttdeci">unsigned long long UINT64</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00130">tools.h:130</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aceaa3079fafcc01a4e994851d7b19b18"><div class="ttname"><a href="namespace_share_api.html#aceaa3079fafcc01a4e994851d7b19b18">ShareApi::lftoa</a></div><div class="ttdeci">LIBTOOLS size_t lftoa(double value, char *szValue, size_t size, size_t dotcount=6)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00946">ShareApi.cpp:946</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a169d4ee242a5f842c91da9be8a179e18"><div class="ttname"><a href="namespace_share_api.html#a169d4ee242a5f842c91da9be8a179e18">ShareApi::Sleep</a></div><div class="ttdeci">LIBTOOLS void Sleep(DWORD dwSleep)</div><div class="ttdoc">线程休眠函数,单位毫秒(ms)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01817">ShareApi.cpp:1817</a></div></div>
<div class="ttc" id="atools_8h_html_a36cb3b01d81ffd844bbbfb54003e06ec"><div class="ttname"><a href="tools_8h.html#a36cb3b01d81ffd844bbbfb54003e06ec">UINT</a></div><div class="ttdeci">unsigned int UINT</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00139">tools.h:139</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a87b8d6d01e677432b988eef8ce62c3fb"><div class="ttname"><a href="namespace_share_api.html#a87b8d6d01e677432b988eef8ce62c3fb">ShareApi::MutexLock</a></div><div class="ttdeci">LIBTOOLS void MutexLock(SYNCHANDLE hMutex)</div><div class="ttdoc">加锁</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01229">ShareApi.cpp:1229</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a13ed8016535f6825c83eedef069ebe41"><div class="ttname"><a href="namespace_share_api.html#a13ed8016535f6825c83eedef069ebe41">ShareApi::WaitForSingleEvent</a></div><div class="ttdeci">LIBTOOLS DWORD WaitForSingleEvent(SYNCHANDLE hEvent, DWORD dwWaitOut)</div><div class="ttdoc">等待事件对象有信号</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01319">ShareApi.cpp:1319</a></div></div>
<div class="ttc" id="atools_8h_html_a3107b1d0ca10d4ae4575d9107d4cbffe"><div class="ttname"><a href="tools_8h.html#a3107b1d0ca10d4ae4575d9107d4cbffe">_stdcall</a></div><div class="ttdeci">#define _stdcall</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00152">tools.h:152</a></div></div>
<div class="ttc" id="atools_8h_html_ac3247c51e4e3de674affb32998e133e2"><div class="ttname"><a href="tools_8h.html#ac3247c51e4e3de674affb32998e133e2">BOOL</a></div><div class="ttdeci">unsigned int BOOL</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00137">tools.h:137</a></div></div>
<div class="ttc" id="astruct___f_i_l_e_f_i_n_d_i_n_f_o___html_aeac0f7a7b532ebfa75dc0becaf579692"><div class="ttname"><a href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#aeac0f7a7b532ebfa75dc0becaf579692">_FILEFINDINFO_::tUpdateTime</a></div><div class="ttdeci">time_t tUpdateTime</div><div class="ttdoc">文件修改的时间</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00317">tools.h:317</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a949e52140a840041bc8d2353327f576a"><div class="ttname"><a href="namespace_share_api.html#a949e52140a840041bc8d2353327f576a">ShareApi::InterlockedExchange64</a></div><div class="ttdeci">LIBTOOLS INT64 InterlockedExchange64(INT64 *Addend, INT64 value)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01772">ShareApi.cpp:1772</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_ada08546d17d96eb6dde8802416ae390d"><div class="ttname"><a href="_share_api_8cpp.html#ada08546d17d96eb6dde8802416ae390d">CheckEventHaveSignal</a></div><div class="ttdeci">int CheckEventHaveSignal(PSGINFO pSginfos, int nSignalCount)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01714">ShareApi.cpp:1714</a></div></div>
<div class="ttc" id="atools_8h_html_ab689500aaec0db066e3ac9483d3fe425"><div class="ttname"><a href="tools_8h.html#ab689500aaec0db066e3ac9483d3fe425">NullPtr</a></div><div class="ttdeci">#define NullPtr</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00119">tools.h:119</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a12d3c7f822d56a7161601bfde8cd2791"><div class="ttname"><a href="namespace_share_api.html#a12d3c7f822d56a7161601bfde8cd2791">ShareApi::GetFilePointerEx</a></div><div class="ttdeci">LIBTOOLS INT64 GetFilePointerEx(FILE_HANDLE hFile)</div><div class="ttdoc">返回当前文件指针位置</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00202">ShareApi.cpp:202</a></div></div>
<div class="ttc" id="anamespace_share_api_html_af5477174100c9b0c5fa9b8a1787c09af"><div class="ttname"><a href="namespace_share_api.html#af5477174100c9b0c5fa9b8a1787c09af">ShareApi::FilePathExists</a></div><div class="ttdeci">LIBTOOLS BOOL FilePathExists(const TCHAR *szFileName)</div><div class="ttdoc">检查文件是否存在</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00474">ShareApi.cpp:474</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ad16c6f67ce210b5dd91e57bbf743f0d7"><div class="ttname"><a href="namespace_share_api.html#ad16c6f67ce210b5dd91e57bbf743f0d7">ShareApi::BeginThread</a></div><div class="ttdeci">LIBTOOLS THREADPTR BeginThread(ThreadRoutine pFunc, void *arg, UINT stack_size=0, ULONG *pThreadId=NULL)</div><div class="ttdoc">创建线程</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01128">ShareApi.cpp:1128</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ae5ba1f54275e01ae695344690c8e5f40"><div class="ttname"><a href="namespace_share_api.html#ae5ba1f54275e01ae695344690c8e5f40">ShareApi::MutexUnlock</a></div><div class="ttdeci">LIBTOOLS void MutexUnlock(SYNCHANDLE hMutex)</div><div class="ttdoc">解锁</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01238">ShareApi.cpp:1238</a></div></div>
<div class="ttc" id="atools_8h_html_acbf03b87f07f587a6e72384c9141182a"><div class="ttname"><a href="tools_8h.html#acbf03b87f07f587a6e72384c9141182a">long_t</a></div><div class="ttdeci">#define long_t</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00252">tools.h:252</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_a7b71d089bec423a820d2986beb4f2de4"><div class="ttname"><a href="_share_api_8cpp.html#a7b71d089bec423a820d2986beb4f2de4">_linux_start_routine</a></div><div class="ttdeci">static void *_stdcall _linux_start_routine(void *arg)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01117">ShareApi.cpp:1117</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a34a96620589e6276f6a506d0180af6d8"><div class="ttname"><a href="namespace_share_api.html#a34a96620589e6276f6a506d0180af6d8">ShareApi::CloseConditionVariable</a></div><div class="ttdeci">LIBTOOLS void CloseConditionVariable(SYNCHANDLE hCond)</div><div class="ttdoc">销毁信号量资源</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01684">ShareApi.cpp:1684</a></div></div>
<div class="ttc" id="astruct___f_i_l_e_f_i_n_d_i_n_f_o___html"><div class="ttname"><a href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html">_FILEFINDINFO_</a></div><div class="ttdoc">文件查找信息</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00311">tools.h:311</a></div></div>
<div class="ttc" id="anamespace_share_api_html_afc7a41f951383d91baa664bae54c03a3"><div class="ttname"><a href="namespace_share_api.html#afc7a41f951383d91baa664bae54c03a3">ShareApi::StartProcess</a></div><div class="ttdeci">LIBTOOLS BOOL StartProcess(const TCHAR *exename, TCHAR **argv=NullPtr, TCHAR **evp=NullPtr)</div><div class="ttdoc">开始一个新进程</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l02073">ShareApi.cpp:2073</a></div></div>
<div class="ttc" id="astruct_____dir_info_html"><div class="ttname"><a href="struct_____dir_info.html">__DirInfo</a></div><div class="ttdoc">内部使用结构体 目录结构句柄</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00108">__tools.h:108</a></div></div>
<div class="ttc" id="aunion___l_a_r_g_e___i_n_t_e_g_e_r_html"><div class="ttname"><a href="union___l_a_r_g_e___i_n_t_e_g_e_r.html">_LARGE_INTEGER</a></div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00202">tools.h:202</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a8d8eb33de0a336b6c099d4196e75fbc6"><div class="ttname"><a href="namespace_share_api.html#a8d8eb33de0a336b6c099d4196e75fbc6">ShareApi::OpenFile</a></div><div class="ttdeci">LIBTOOLS FILE_HANDLE OpenFile(const TCHAR *szFileName, unsigned int iMode)</div><div class="ttdoc">打开文件</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00084">ShareApi.cpp:84</a></div></div>
<div class="ttc" id="astruct___f_i_l_e_f_i_n_d_i_n_f_o___html_ad9c9e6207a688f672d689fa75f83da1a"><div class="ttname"><a href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#ad9c9e6207a688f672d689fa75f83da1a">_FILEFINDINFO_::tCreateTime</a></div><div class="ttdeci">time_t tCreateTime</div><div class="ttdoc">文件创建的时间</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00316">tools.h:316</a></div></div>
<div class="ttc" id="astruct___f_i_l_e_f_i_n_d_i_n_f_o___html_a857b9e763ea3e183a8e6a582af305c82"><div class="ttname"><a href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a857b9e763ea3e183a8e6a582af305c82">_FILEFINDINFO_::szFileName</a></div><div class="ttdeci">TCHAR szFileName[MAX_PATH]</div><div class="ttdoc">文件名称</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00313">tools.h:313</a></div></div>
<div class="ttc" id="atools_8h_html_a01e895c2df346ffe662bbe69686d8d51"><div class="ttname"><a href="tools_8h.html#a01e895c2df346ffe662bbe69686d8d51">SYNCHANDLE</a></div><div class="ttdeci">#define SYNCHANDLE</div><div class="ttdoc">异步函数句柄</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00329">tools.h:329</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a753dde889b11d29612c759d13ee359b3"><div class="ttname"><a href="namespace_share_api.html#a753dde889b11d29612c759d13ee359b3">ShareApi::FindClose</a></div><div class="ttdeci">LIBTOOLS void FindClose(FILE_HANDLE hFile)</div><div class="ttdoc">关闭目录遍历</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00431">ShareApi.cpp:431</a></div></div>
<div class="ttc" id="atools_8h_html_aabb8b876e7495cfb11a152cdf728815c"><div class="ttname"><a href="tools_8h.html#aabb8b876e7495cfb11a152cdf728815c">_snprintf</a></div><div class="ttdeci">#define _snprintf</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00157">tools.h:157</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a4e74675c3ae4e3233eeeb2088057aca8"><div class="ttname"><a href="namespace_share_api.html#a4e74675c3ae4e3233eeeb2088057aca8">ShareApi::GetCurrentDirectory</a></div><div class="ttdeci">LIBTOOLS BOOL GetCurrentDirectory(DWORD size, TCHAR *szPath)</div><div class="ttdoc">获取当前进程目录</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00485">ShareApi.cpp:485</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_ae664793a10c03e8275ff3005e6774741"><div class="ttname"><a href="_share_api_8cpp.html#ae664793a10c03e8275ff3005e6774741">_PINLINE_THREAD_DATA</a></div><div class="ttdeci">struct __INLINE_THREAD_DATA * _PINLINE_THREAD_DATA</div></div>
<div class="ttc" id="anamespace_share_api_html_a35355024be699fab00fff43941b41914"><div class="ttname"><a href="namespace_share_api.html#a35355024be699fab00fff43941b41914">ShareApi::WS_CPY_AS</a></div><div class="ttdeci">LIBTOOLS BOOL WS_CPY_AS(size_t size, char *des, const WCHAR *src)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00739">ShareApi.cpp:739</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a52ea835c01d56aaf225ab37baacf7dd6"><div class="ttname"><a href="namespace_share_api.html#a52ea835c01d56aaf225ab37baacf7dd6">ShareApi::QueryPerformanceCounter</a></div><div class="ttdeci">LIBTOOLS BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)</div><div class="ttdoc">获取CPU的执行时间</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01860">ShareApi.cpp:1860</a></div></div>
<div class="ttc" id="astruct___f_i_l_e_f_i_n_d_i_n_f_o___html_a12703399394ee01b4753a90543f1e3c6"><div class="ttname"><a href="struct___f_i_l_e_f_i_n_d_i_n_f_o__.html#a12703399394ee01b4753a90543f1e3c6">_FILEFINDINFO_::dwFilesize</a></div><div class="ttdeci">INT64 dwFilesize</div><div class="ttdoc">文件大小,如果是目录统一为0字节</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00315">tools.h:315</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a5853aba96a6eaed3b9dd1a66805f6070"><div class="ttname"><a href="namespace_share_api.html#a5853aba96a6eaed3b9dd1a66805f6070">ShareApi::GetFileSizeEx</a></div><div class="ttdeci">LIBTOOLS INT64 GetFileSizeEx(FILE_HANDLE hFile)</div><div class="ttdoc">获取文件大小</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00146">ShareApi.cpp:146</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ae93328641ac50ed7196d704ff24b3dc2"><div class="ttname"><a href="namespace_share_api.html#ae93328641ac50ed7196d704ff24b3dc2">ShareApi::PathAppend</a></div><div class="ttdeci">LIBTOOLS void PathAppend(TCHAR *srcdir, const TCHAR *subdir)</div><div class="ttdoc">添加目录的子目录名称</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00446">ShareApi.cpp:446</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a35bc338ea514bb9d9f3de57730db5d60"><div class="ttname"><a href="namespace_share_api.html#a35bc338ea514bb9d9f3de57730db5d60">ShareApi::SetFilePointer</a></div><div class="ttdeci">LIBTOOLS BOOL SetFilePointer(FILE_HANDLE hFile, int dwOffset, int iWhence)</div><div class="ttdoc">参考SetFilePointerEx的函数说明</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00188">ShareApi.cpp:188</a></div></div>
<div class="ttc" id="astruct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a_html_a8d5c94cdde539635b121b9fbb791ccd4"><div class="ttname"><a href="struct_____i_n_l_i_n_e___t_h_r_e_a_d___d_a_t_a.html#a8d5c94cdde539635b121b9fbb791ccd4">__INLINE_THREAD_DATA::__INLINE_THREAD_DATA</a></div><div class="ttdeci">__INLINE_THREAD_DATA(void *value, ThreadRoutine func, size_t suspend)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01098">ShareApi.cpp:1098</a></div></div>
<div class="ttc" id="anamespace_share_api_html_ac170c14f06c9eaa6710df7726e475908"><div class="ttname"><a href="namespace_share_api.html#ac170c14f06c9eaa6710df7726e475908">ShareApi::ftoa</a></div><div class="ttdeci">LIBTOOLS size_t ftoa(float value, char *szValue, size_t size, size_t dotcount=6)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00868">ShareApi.cpp:868</a></div></div>
<div class="ttc" id="a_algorithm_8h_html_a06f9a9fa653c88f36445cacf0ea7ad8d"><div class="ttname"><a href="_algorithm_8h.html#a06f9a9fa653c88f36445cacf0ea7ad8d">copy_seq</a></div><div class="ttdeci">size_t copy_seq(Value1 *v1, size_t s1, const Value2 *v2, size_t s2)</div><div class="ttdoc">拷贝序列2中的值到序列1中</div><div class="ttdef"><b>Definition:</b> <a href="_algorithm_8h_source.html#l00053">Algorithm.h:53</a></div></div>
<div class="ttc" id="atools_8h_html_a6a2b55a6391419ed0b7b9da06e094b4b"><div class="ttname"><a href="tools_8h.html#a6a2b55a6391419ed0b7b9da06e094b4b">INT64</a></div><div class="ttdeci">long long INT64</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00132">tools.h:132</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_aa429fd44d991e54973173c58666b655d"><div class="ttname"><a href="_share_api_8cpp.html#aa429fd44d991e54973173c58666b655d">__CheckEvent</a></div><div class="ttdeci">int __CheckEvent(PEVENTFD *pEvent, int nEventCount)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01346">ShareApi.cpp:1346</a></div></div>
<div class="ttc" id="astruct___s_i_g_n_a_l_i_n_f_o_html"><div class="ttname"><a href="struct___s_i_g_n_a_l_i_n_f_o.html">_SIGNALINFO</a></div><div class="ttdoc">内部使用结构体，已废弃</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00045">__tools.h:45</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_a00f2cbea818f1515ea4c4c71d6accbab"><div class="ttname"><a href="_share_api_8cpp.html#a00f2cbea818f1515ea4c4c71d6accbab">__OpeWaitCountValue</a></div><div class="ttdeci">void __OpeWaitCountValue(std::map&lt; int, PEVENTFD * &gt; &amp;mefds, bool bAdd)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01416">ShareApi.cpp:1416</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a0a37d9b5c4fe9f8f5611369885097b67"><div class="ttname"><a href="namespace_share_api.html#a0a37d9b5c4fe9f8f5611369885097b67">ShareApi::GetTickCount</a></div><div class="ttdeci">LIBTOOLS DWORD GetTickCount()</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01839">ShareApi.cpp:1839</a></div></div>
<div class="ttc" id="atools_8h_html_a9154c0d0c21af4686624543215b4e5f2"><div class="ttname"><a href="tools_8h.html#a9154c0d0c21af4686624543215b4e5f2">LONG</a></div><div class="ttdeci">int LONG</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00128">tools.h:128</a></div></div>
<div class="ttc" id="a_share_api_8cpp_html_a5494485d08eceb579cfc5f77a93e2e93"><div class="ttname"><a href="_share_api_8cpp.html#a5494485d08eceb579cfc5f77a93e2e93">__ResetAllEvent</a></div><div class="ttdeci">void __ResetAllEvent(PEVENTFD *pfds, int nEventCount)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l01428">ShareApi.cpp:1428</a></div></div>
<div class="ttc" id="atools_8h_html_ab00d7bdead70fa34f855541305b0c89e"><div class="ttname"><a href="tools_8h.html#ab00d7bdead70fa34f855541305b0c89e">FILE_HANDLE</a></div><div class="ttdeci">#define FILE_HANDLE</div><div class="ttdoc">文件句柄</div><div class="ttdef"><b>Definition:</b> <a href="tools_8h_source.html#l00306">tools.h:306</a></div></div>
<div class="ttc" id="astruct___e_v_e_n_t_f_d_html_af93a0d73c7421ef80e168c305dd913e5"><div class="ttname"><a href="struct___e_v_e_n_t_f_d.html#af93a0d73c7421ef80e168c305dd913e5">_EVENTFD::efd</a></div><div class="ttdeci">int efd</div><div class="ttdef"><b>Definition:</b> <a href="____tools_8h_source.html#l00073">__tools.h:73</a></div></div>
<div class="ttc" id="anamespace_share_api_html_a2a12b9ef4412b9abb4848f65ffa2850e"><div class="ttname"><a href="namespace_share_api.html#a2a12b9ef4412b9abb4848f65ffa2850e">ShareApi::CreateDirectory</a></div><div class="ttdeci">LIBTOOLS BOOL CreateDirectory(const TCHAR *szPathName)</div><div class="ttdoc">创建目录</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00497">ShareApi.cpp:497</a></div></div>
<div class="ttc" id="anamespace_share_api_html_aaf65e2886782dff810bc58f68d3ceab4"><div class="ttname"><a href="namespace_share_api.html#aaf65e2886782dff810bc58f68d3ceab4">ShareApi::UTF8_CPY_WS</a></div><div class="ttdeci">LIBTOOLS BOOL UTF8_CPY_WS(size_t size, WCHAR *des, const char *src)</div><div class="ttdef"><b>Definition:</b> <a href="_share_api_8cpp_source.html#l00686">ShareApi.cpp:686</a></div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者 &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.16
</small></address>
</body>
</html>
